posterly-mcp-server 0.40.0 → 0.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/index.js +10 -0
- package/dist/lib/api-client.d.ts +46 -10
- package/dist/lib/api-client.js +13 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/tools/add-google-business-media.d.ts +2 -2
- package/dist/tools/create-post.d.ts +436 -0
- package/dist/tools/create-post.js +8 -0
- package/dist/tools/create-posts-batch.d.ts +164 -0
- package/dist/tools/generate-image.d.ts +12 -4
- package/dist/tools/generate-image.js +22 -17
- package/dist/tools/get-image-job.d.ts +24 -0
- package/dist/tools/get-image-job.js +31 -0
- package/dist/tools/update-post.d.ts +196 -0
- package/dist/tools/update-post.js +8 -0
- package/dist/tools/validate-post.d.ts +240 -0
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/index.ts +16 -0
- package/src/lib/api-client.ts +46 -6
- package/src/lib/version.ts +1 -1
- package/src/tools/create-post.ts +9 -0
- package/src/tools/generate-image.ts +25 -21
- package/src/tools/get-image-job.ts +36 -0
- package/src/tools/update-post.ts +9 -0
- package/tool-annotations.json +3 -0
|
@@ -43,6 +43,22 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
|
|
|
43
43
|
}>]>, "many">>;
|
|
44
44
|
first_comment: import("zod").ZodOptional<import("zod").ZodString>;
|
|
45
45
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
46
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
47
|
+
index: import("zod").ZodNumber;
|
|
48
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
49
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
50
|
+
alt_text: import("zod").ZodString;
|
|
51
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
52
|
+
index: number;
|
|
53
|
+
alt_text: string;
|
|
54
|
+
asset_id?: string | undefined;
|
|
55
|
+
source_url?: string | undefined;
|
|
56
|
+
}, {
|
|
57
|
+
index: number;
|
|
58
|
+
alt_text: string;
|
|
59
|
+
asset_id?: string | undefined;
|
|
60
|
+
source_url?: string | undefined;
|
|
61
|
+
}>, "many">>;
|
|
46
62
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
47
63
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
48
64
|
is_ai_generated: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
@@ -66,6 +82,12 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
|
|
|
66
82
|
})[] | undefined;
|
|
67
83
|
first_comment?: string | undefined;
|
|
68
84
|
media_alt_texts?: Record<string, string> | undefined;
|
|
85
|
+
media_accessibility?: {
|
|
86
|
+
index: number;
|
|
87
|
+
alt_text: string;
|
|
88
|
+
asset_id?: string | undefined;
|
|
89
|
+
source_url?: string | undefined;
|
|
90
|
+
}[] | undefined;
|
|
69
91
|
is_ai_generated?: boolean | undefined;
|
|
70
92
|
audio_id?: string | undefined;
|
|
71
93
|
}, {
|
|
@@ -87,6 +109,12 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
|
|
|
87
109
|
})[] | undefined;
|
|
88
110
|
first_comment?: string | undefined;
|
|
89
111
|
media_alt_texts?: Record<string, string> | undefined;
|
|
112
|
+
media_accessibility?: {
|
|
113
|
+
index: number;
|
|
114
|
+
alt_text: string;
|
|
115
|
+
asset_id?: string | undefined;
|
|
116
|
+
source_url?: string | undefined;
|
|
117
|
+
}[] | undefined;
|
|
90
118
|
is_ai_generated?: boolean | undefined;
|
|
91
119
|
audio_id?: string | undefined;
|
|
92
120
|
}>>;
|
|
@@ -95,6 +123,22 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
|
|
|
95
123
|
post_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
96
124
|
content_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
97
125
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
126
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
127
|
+
index: import("zod").ZodNumber;
|
|
128
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
129
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
130
|
+
alt_text: import("zod").ZodString;
|
|
131
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
132
|
+
index: number;
|
|
133
|
+
alt_text: string;
|
|
134
|
+
asset_id?: string | undefined;
|
|
135
|
+
source_url?: string | undefined;
|
|
136
|
+
}, {
|
|
137
|
+
index: number;
|
|
138
|
+
alt_text: string;
|
|
139
|
+
asset_id?: string | undefined;
|
|
140
|
+
source_url?: string | undefined;
|
|
141
|
+
}>, "many">>;
|
|
98
142
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
99
143
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
100
144
|
reply_settings: import("zod").ZodOptional<import("zod").ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
@@ -202,6 +246,22 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
|
|
|
202
246
|
post_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
203
247
|
content_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
204
248
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
249
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
250
|
+
index: import("zod").ZodNumber;
|
|
251
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
252
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
253
|
+
alt_text: import("zod").ZodString;
|
|
254
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
255
|
+
index: number;
|
|
256
|
+
alt_text: string;
|
|
257
|
+
asset_id?: string | undefined;
|
|
258
|
+
source_url?: string | undefined;
|
|
259
|
+
}, {
|
|
260
|
+
index: number;
|
|
261
|
+
alt_text: string;
|
|
262
|
+
asset_id?: string | undefined;
|
|
263
|
+
source_url?: string | undefined;
|
|
264
|
+
}>, "many">>;
|
|
205
265
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
206
266
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
207
267
|
reply_settings: import("zod").ZodOptional<import("zod").ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
@@ -309,6 +369,22 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
|
|
|
309
369
|
post_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
310
370
|
content_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
311
371
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
372
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
373
|
+
index: import("zod").ZodNumber;
|
|
374
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
375
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
376
|
+
alt_text: import("zod").ZodString;
|
|
377
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
378
|
+
index: number;
|
|
379
|
+
alt_text: string;
|
|
380
|
+
asset_id?: string | undefined;
|
|
381
|
+
source_url?: string | undefined;
|
|
382
|
+
}, {
|
|
383
|
+
index: number;
|
|
384
|
+
alt_text: string;
|
|
385
|
+
asset_id?: string | undefined;
|
|
386
|
+
source_url?: string | undefined;
|
|
387
|
+
}>, "many">>;
|
|
312
388
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
313
389
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
314
390
|
reply_settings: import("zod").ZodOptional<import("zod").ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
@@ -443,6 +519,12 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
|
|
|
443
519
|
})[] | undefined;
|
|
444
520
|
first_comment?: string | undefined;
|
|
445
521
|
media_alt_texts?: Record<string, string> | undefined;
|
|
522
|
+
media_accessibility?: {
|
|
523
|
+
index: number;
|
|
524
|
+
alt_text: string;
|
|
525
|
+
asset_id?: string | undefined;
|
|
526
|
+
source_url?: string | undefined;
|
|
527
|
+
}[] | undefined;
|
|
446
528
|
is_ai_generated?: boolean | undefined;
|
|
447
529
|
audio_id?: string | undefined;
|
|
448
530
|
} | undefined;
|
|
@@ -451,6 +533,22 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
|
|
|
451
533
|
post_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
452
534
|
content_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
453
535
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
536
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
537
|
+
index: import("zod").ZodNumber;
|
|
538
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
539
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
540
|
+
alt_text: import("zod").ZodString;
|
|
541
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
542
|
+
index: number;
|
|
543
|
+
alt_text: string;
|
|
544
|
+
asset_id?: string | undefined;
|
|
545
|
+
source_url?: string | undefined;
|
|
546
|
+
}, {
|
|
547
|
+
index: number;
|
|
548
|
+
alt_text: string;
|
|
549
|
+
asset_id?: string | undefined;
|
|
550
|
+
source_url?: string | undefined;
|
|
551
|
+
}>, "many">>;
|
|
454
552
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
455
553
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
456
554
|
reply_settings: import("zod").ZodOptional<import("zod").ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
@@ -584,6 +682,12 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
|
|
|
584
682
|
})[] | undefined;
|
|
585
683
|
first_comment?: string | undefined;
|
|
586
684
|
media_alt_texts?: Record<string, string> | undefined;
|
|
685
|
+
media_accessibility?: {
|
|
686
|
+
index: number;
|
|
687
|
+
alt_text: string;
|
|
688
|
+
asset_id?: string | undefined;
|
|
689
|
+
source_url?: string | undefined;
|
|
690
|
+
}[] | undefined;
|
|
587
691
|
is_ai_generated?: boolean | undefined;
|
|
588
692
|
audio_id?: string | undefined;
|
|
589
693
|
} | undefined;
|
|
@@ -592,6 +696,22 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
|
|
|
592
696
|
post_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
593
697
|
content_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
594
698
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
699
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
700
|
+
index: import("zod").ZodNumber;
|
|
701
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
702
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
703
|
+
alt_text: import("zod").ZodString;
|
|
704
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
705
|
+
index: number;
|
|
706
|
+
alt_text: string;
|
|
707
|
+
asset_id?: string | undefined;
|
|
708
|
+
source_url?: string | undefined;
|
|
709
|
+
}, {
|
|
710
|
+
index: number;
|
|
711
|
+
alt_text: string;
|
|
712
|
+
asset_id?: string | undefined;
|
|
713
|
+
source_url?: string | undefined;
|
|
714
|
+
}>, "many">>;
|
|
595
715
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
596
716
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
597
717
|
reply_settings: import("zod").ZodOptional<import("zod").ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
@@ -743,6 +863,22 @@ export declare const validatePostTool: {
|
|
|
743
863
|
}>]>, "many">>;
|
|
744
864
|
first_comment: import("zod").ZodOptional<import("zod").ZodString>;
|
|
745
865
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
866
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
867
|
+
index: import("zod").ZodNumber;
|
|
868
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
869
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
870
|
+
alt_text: import("zod").ZodString;
|
|
871
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
872
|
+
index: number;
|
|
873
|
+
alt_text: string;
|
|
874
|
+
asset_id?: string | undefined;
|
|
875
|
+
source_url?: string | undefined;
|
|
876
|
+
}, {
|
|
877
|
+
index: number;
|
|
878
|
+
alt_text: string;
|
|
879
|
+
asset_id?: string | undefined;
|
|
880
|
+
source_url?: string | undefined;
|
|
881
|
+
}>, "many">>;
|
|
746
882
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
747
883
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
748
884
|
is_ai_generated: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
@@ -766,6 +902,12 @@ export declare const validatePostTool: {
|
|
|
766
902
|
})[] | undefined;
|
|
767
903
|
first_comment?: string | undefined;
|
|
768
904
|
media_alt_texts?: Record<string, string> | undefined;
|
|
905
|
+
media_accessibility?: {
|
|
906
|
+
index: number;
|
|
907
|
+
alt_text: string;
|
|
908
|
+
asset_id?: string | undefined;
|
|
909
|
+
source_url?: string | undefined;
|
|
910
|
+
}[] | undefined;
|
|
769
911
|
is_ai_generated?: boolean | undefined;
|
|
770
912
|
audio_id?: string | undefined;
|
|
771
913
|
}, {
|
|
@@ -787,6 +929,12 @@ export declare const validatePostTool: {
|
|
|
787
929
|
})[] | undefined;
|
|
788
930
|
first_comment?: string | undefined;
|
|
789
931
|
media_alt_texts?: Record<string, string> | undefined;
|
|
932
|
+
media_accessibility?: {
|
|
933
|
+
index: number;
|
|
934
|
+
alt_text: string;
|
|
935
|
+
asset_id?: string | undefined;
|
|
936
|
+
source_url?: string | undefined;
|
|
937
|
+
}[] | undefined;
|
|
790
938
|
is_ai_generated?: boolean | undefined;
|
|
791
939
|
audio_id?: string | undefined;
|
|
792
940
|
}>>;
|
|
@@ -795,6 +943,22 @@ export declare const validatePostTool: {
|
|
|
795
943
|
post_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
796
944
|
content_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
797
945
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
946
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
947
|
+
index: import("zod").ZodNumber;
|
|
948
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
949
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
950
|
+
alt_text: import("zod").ZodString;
|
|
951
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
952
|
+
index: number;
|
|
953
|
+
alt_text: string;
|
|
954
|
+
asset_id?: string | undefined;
|
|
955
|
+
source_url?: string | undefined;
|
|
956
|
+
}, {
|
|
957
|
+
index: number;
|
|
958
|
+
alt_text: string;
|
|
959
|
+
asset_id?: string | undefined;
|
|
960
|
+
source_url?: string | undefined;
|
|
961
|
+
}>, "many">>;
|
|
798
962
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
799
963
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
800
964
|
reply_settings: import("zod").ZodOptional<import("zod").ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
@@ -902,6 +1066,22 @@ export declare const validatePostTool: {
|
|
|
902
1066
|
post_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
903
1067
|
content_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
904
1068
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
1069
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
1070
|
+
index: import("zod").ZodNumber;
|
|
1071
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1072
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1073
|
+
alt_text: import("zod").ZodString;
|
|
1074
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
1075
|
+
index: number;
|
|
1076
|
+
alt_text: string;
|
|
1077
|
+
asset_id?: string | undefined;
|
|
1078
|
+
source_url?: string | undefined;
|
|
1079
|
+
}, {
|
|
1080
|
+
index: number;
|
|
1081
|
+
alt_text: string;
|
|
1082
|
+
asset_id?: string | undefined;
|
|
1083
|
+
source_url?: string | undefined;
|
|
1084
|
+
}>, "many">>;
|
|
905
1085
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
906
1086
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
907
1087
|
reply_settings: import("zod").ZodOptional<import("zod").ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
@@ -1009,6 +1189,22 @@ export declare const validatePostTool: {
|
|
|
1009
1189
|
post_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1010
1190
|
content_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1011
1191
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
1192
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
1193
|
+
index: import("zod").ZodNumber;
|
|
1194
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1195
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1196
|
+
alt_text: import("zod").ZodString;
|
|
1197
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
1198
|
+
index: number;
|
|
1199
|
+
alt_text: string;
|
|
1200
|
+
asset_id?: string | undefined;
|
|
1201
|
+
source_url?: string | undefined;
|
|
1202
|
+
}, {
|
|
1203
|
+
index: number;
|
|
1204
|
+
alt_text: string;
|
|
1205
|
+
asset_id?: string | undefined;
|
|
1206
|
+
source_url?: string | undefined;
|
|
1207
|
+
}>, "many">>;
|
|
1012
1208
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1013
1209
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
1014
1210
|
reply_settings: import("zod").ZodOptional<import("zod").ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
@@ -1143,6 +1339,12 @@ export declare const validatePostTool: {
|
|
|
1143
1339
|
})[] | undefined;
|
|
1144
1340
|
first_comment?: string | undefined;
|
|
1145
1341
|
media_alt_texts?: Record<string, string> | undefined;
|
|
1342
|
+
media_accessibility?: {
|
|
1343
|
+
index: number;
|
|
1344
|
+
alt_text: string;
|
|
1345
|
+
asset_id?: string | undefined;
|
|
1346
|
+
source_url?: string | undefined;
|
|
1347
|
+
}[] | undefined;
|
|
1146
1348
|
is_ai_generated?: boolean | undefined;
|
|
1147
1349
|
audio_id?: string | undefined;
|
|
1148
1350
|
} | undefined;
|
|
@@ -1151,6 +1353,22 @@ export declare const validatePostTool: {
|
|
|
1151
1353
|
post_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1152
1354
|
content_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1153
1355
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
1356
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
1357
|
+
index: import("zod").ZodNumber;
|
|
1358
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1359
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1360
|
+
alt_text: import("zod").ZodString;
|
|
1361
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
1362
|
+
index: number;
|
|
1363
|
+
alt_text: string;
|
|
1364
|
+
asset_id?: string | undefined;
|
|
1365
|
+
source_url?: string | undefined;
|
|
1366
|
+
}, {
|
|
1367
|
+
index: number;
|
|
1368
|
+
alt_text: string;
|
|
1369
|
+
asset_id?: string | undefined;
|
|
1370
|
+
source_url?: string | undefined;
|
|
1371
|
+
}>, "many">>;
|
|
1154
1372
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1155
1373
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
1156
1374
|
reply_settings: import("zod").ZodOptional<import("zod").ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
@@ -1284,6 +1502,12 @@ export declare const validatePostTool: {
|
|
|
1284
1502
|
})[] | undefined;
|
|
1285
1503
|
first_comment?: string | undefined;
|
|
1286
1504
|
media_alt_texts?: Record<string, string> | undefined;
|
|
1505
|
+
media_accessibility?: {
|
|
1506
|
+
index: number;
|
|
1507
|
+
alt_text: string;
|
|
1508
|
+
asset_id?: string | undefined;
|
|
1509
|
+
source_url?: string | undefined;
|
|
1510
|
+
}[] | undefined;
|
|
1287
1511
|
is_ai_generated?: boolean | undefined;
|
|
1288
1512
|
audio_id?: string | undefined;
|
|
1289
1513
|
} | undefined;
|
|
@@ -1292,6 +1516,22 @@ export declare const validatePostTool: {
|
|
|
1292
1516
|
post_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1293
1517
|
content_type: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1294
1518
|
media_alt_texts: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
|
|
1519
|
+
media_accessibility: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
1520
|
+
index: import("zod").ZodNumber;
|
|
1521
|
+
asset_id: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1522
|
+
source_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1523
|
+
alt_text: import("zod").ZodString;
|
|
1524
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
1525
|
+
index: number;
|
|
1526
|
+
alt_text: string;
|
|
1527
|
+
asset_id?: string | undefined;
|
|
1528
|
+
source_url?: string | undefined;
|
|
1529
|
+
}, {
|
|
1530
|
+
index: number;
|
|
1531
|
+
alt_text: string;
|
|
1532
|
+
asset_id?: string | undefined;
|
|
1533
|
+
source_url?: string | undefined;
|
|
1534
|
+
}>, "many">>;
|
|
1295
1535
|
reel_cover_url: import("zod").ZodOptional<import("zod").ZodString>;
|
|
1296
1536
|
reel_thumb_offset: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
1297
1537
|
reply_settings: import("zod").ZodOptional<import("zod").ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "posterly-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.0",
|
|
4
4
|
"mcpName": "io.github.awpthorp/posterly",
|
|
5
5
|
"description": "MCP server for posterly: schedule and publish social media posts across 18 platforms from any MCP client (Claude, ChatGPT, Cursor, Windsurf, Cline, and more)",
|
|
6
6
|
"license": "MIT",
|
package/server.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "io.github.awpthorp/posterly",
|
|
4
4
|
"title": "posterly",
|
|
5
5
|
"description": "Validate, schedule, publish, and analyze social content across 18 platforms with posterly.",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.43.0",
|
|
7
7
|
"websiteUrl": "https://www.poster.ly/mcp",
|
|
8
8
|
"repository": {
|
|
9
9
|
"url": "https://github.com/awpthorp/posterly",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
{
|
|
15
15
|
"registryType": "npm",
|
|
16
16
|
"identifier": "posterly-mcp-server",
|
|
17
|
-
"version": "0.
|
|
17
|
+
"version": "0.43.0",
|
|
18
18
|
"transport": {
|
|
19
19
|
"type": "stdio"
|
|
20
20
|
},
|
package/src/index.ts
CHANGED
|
@@ -39,6 +39,7 @@ import { deletePostGroupTool } from './tools/delete-post-group.js';
|
|
|
39
39
|
import { whoamiTool } from './tools/whoami.js';
|
|
40
40
|
import { generateCaptionsTool } from './tools/generate-captions.js';
|
|
41
41
|
import { generateImageTool } from './tools/generate-image.js';
|
|
42
|
+
import { getImageJobTool } from './tools/get-image-job.js';
|
|
42
43
|
import { getVideoOptionsTool } from './tools/get-video-options.js';
|
|
43
44
|
import { runVideoFunctionTool } from './tools/run-video-function.js';
|
|
44
45
|
import { generateVideoTool } from './tools/generate-video.js';
|
|
@@ -898,6 +899,21 @@ server.tool(
|
|
|
898
899
|
}
|
|
899
900
|
);
|
|
900
901
|
|
|
902
|
+
server.tool(
|
|
903
|
+
getImageJobTool.name,
|
|
904
|
+
getImageJobTool.description,
|
|
905
|
+
getImageJobTool.inputSchema.shape,
|
|
906
|
+
getToolAnnotations(getImageJobTool.name),
|
|
907
|
+
async (input) => {
|
|
908
|
+
try {
|
|
909
|
+
const text = await getImageJobTool.execute(client, input as any);
|
|
910
|
+
return { content: [{ type: 'text' as const, text }] };
|
|
911
|
+
} catch (err: any) {
|
|
912
|
+
return { content: [{ type: 'text' as const, text: `Error: ${err.message}` }], isError: true };
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
);
|
|
916
|
+
|
|
901
917
|
server.tool(
|
|
902
918
|
getPostTool.name,
|
|
903
919
|
getPostTool.description,
|
package/src/lib/api-client.ts
CHANGED
|
@@ -165,6 +165,7 @@ export interface InstagramPostSettings {
|
|
|
165
165
|
user_tags?: Array<string | { username?: string; label?: string; handle?: string }>;
|
|
166
166
|
first_comment?: string;
|
|
167
167
|
media_alt_texts?: Record<string, string>;
|
|
168
|
+
media_accessibility?: Array<{ index: number; asset_id?: string; source_url?: string; alt_text: string }>;
|
|
168
169
|
reel_cover_url?: string;
|
|
169
170
|
reel_thumb_offset?: number;
|
|
170
171
|
}
|
|
@@ -893,6 +894,25 @@ export interface PublicSignupSessionResponse {
|
|
|
893
894
|
signup_session: PublicSignupSession;
|
|
894
895
|
}
|
|
895
896
|
|
|
897
|
+
export interface ImageJob {
|
|
898
|
+
id: string;
|
|
899
|
+
status: string;
|
|
900
|
+
provider: 'google' | 'xai';
|
|
901
|
+
prompt: string;
|
|
902
|
+
model: string;
|
|
903
|
+
resolution: string;
|
|
904
|
+
quality?: string | null;
|
|
905
|
+
thinking_level?: string | null;
|
|
906
|
+
variations: number;
|
|
907
|
+
urls: string[];
|
|
908
|
+
images: Array<{ url: string; filename?: string; path?: string }>;
|
|
909
|
+
error_message?: string | null;
|
|
910
|
+
credit_cost: number;
|
|
911
|
+
created_at: string;
|
|
912
|
+
started_at?: string | null;
|
|
913
|
+
completed_at?: string | null;
|
|
914
|
+
}
|
|
915
|
+
|
|
896
916
|
export interface VideoJob {
|
|
897
917
|
id: string;
|
|
898
918
|
status: string;
|
|
@@ -1028,6 +1048,7 @@ export class PosterlyClient {
|
|
|
1028
1048
|
const url = `${this.baseUrl}/api/v1${path}`;
|
|
1029
1049
|
const headers: Record<string, string> = {
|
|
1030
1050
|
Authorization: `Bearer ${this.apiKey}`,
|
|
1051
|
+
'X-Posterly-Source': 'mcp_stdio',
|
|
1031
1052
|
};
|
|
1032
1053
|
|
|
1033
1054
|
const init: RequestInit = { method, headers };
|
|
@@ -1368,20 +1389,24 @@ export class PosterlyClient {
|
|
|
1368
1389
|
provider?: 'google' | 'xai';
|
|
1369
1390
|
model?: 'lite' | 'flash' | 'pro';
|
|
1370
1391
|
resolution?: '512' | '1K' | '2K' | '4K';
|
|
1371
|
-
quality?: 'low' | 'medium';
|
|
1392
|
+
quality?: 'low' | 'medium' | 'high';
|
|
1393
|
+
thinking_level?: 'minimal' | 'high';
|
|
1394
|
+
reference_image_urls?: string[];
|
|
1372
1395
|
}): Promise<{
|
|
1373
|
-
|
|
1374
|
-
|
|
1396
|
+
job_id: string;
|
|
1397
|
+
status: string;
|
|
1398
|
+
message?: string;
|
|
1375
1399
|
model: string;
|
|
1376
1400
|
provider: 'google' | 'xai';
|
|
1401
|
+
resolution?: string;
|
|
1402
|
+
thinking_level?: 'minimal' | 'high' | null;
|
|
1377
1403
|
credits_used: number;
|
|
1378
|
-
|
|
1379
|
-
usage: {
|
|
1404
|
+
usage?: {
|
|
1380
1405
|
used: number | null;
|
|
1381
1406
|
limit: number | null;
|
|
1382
1407
|
period: string | null;
|
|
1383
1408
|
tier: string | null;
|
|
1384
|
-
billed_from:
|
|
1409
|
+
billed_from: string;
|
|
1385
1410
|
};
|
|
1386
1411
|
}> {
|
|
1387
1412
|
return this.request('POST', '/ai/generate-image', data);
|
|
@@ -1431,6 +1456,21 @@ export class PosterlyClient {
|
|
|
1431
1456
|
return this.request('GET', `/ai/video-jobs${qs ? `?${qs}` : ''}`);
|
|
1432
1457
|
}
|
|
1433
1458
|
|
|
1459
|
+
async getImageJob(params?: {
|
|
1460
|
+
job_id?: string;
|
|
1461
|
+
status?: string;
|
|
1462
|
+
limit?: number;
|
|
1463
|
+
}): Promise<{ job?: ImageJob; jobs?: ImageJob[] }> {
|
|
1464
|
+
if (params?.job_id) {
|
|
1465
|
+
return this.request('GET', `/ai/image-jobs/${encodeURIComponent(params.job_id)}`);
|
|
1466
|
+
}
|
|
1467
|
+
const searchParams = new URLSearchParams();
|
|
1468
|
+
if (params?.status) searchParams.set('status', params.status);
|
|
1469
|
+
if (params?.limit) searchParams.set('limit', String(params.limit));
|
|
1470
|
+
const qs = searchParams.toString();
|
|
1471
|
+
return this.request('GET', `/ai/image-jobs${qs ? `?${qs}` : ''}`);
|
|
1472
|
+
}
|
|
1473
|
+
|
|
1434
1474
|
async findAvailableSlots(params?: {
|
|
1435
1475
|
account_ids?: string[];
|
|
1436
1476
|
timezone?: string;
|
package/src/lib/version.ts
CHANGED
|
@@ -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.
|
|
8
|
+
export const POSTERLY_MCP_VERSION = '0.43.0';
|
package/src/tools/create-post.ts
CHANGED
|
@@ -3,6 +3,13 @@ import type { PosterlyClient } from '../lib/api-client.js';
|
|
|
3
3
|
import { dashboardUrlForPost, formatLocalDateTime } from '../lib/format.js';
|
|
4
4
|
import { SUPPORTED_PLATFORM_INPUTS, SUPPORTED_PLATFORM_IDS } from '../generated/platform-manifest.js';
|
|
5
5
|
|
|
6
|
+
const mediaAccessibilitySchema = z.array(z.object({
|
|
7
|
+
index: z.number().int().nonnegative(),
|
|
8
|
+
asset_id: z.string().optional(),
|
|
9
|
+
source_url: z.string().url().optional(),
|
|
10
|
+
alt_text: z.string(),
|
|
11
|
+
})).describe('Preferred ordered media alt text. Identity follows index/asset_id through platform media preparation; media_alt_texts remains the legacy URL-map form.');
|
|
12
|
+
|
|
6
13
|
export const instagramSettingsSchema = z.object({
|
|
7
14
|
__type: z.enum(['instagram', 'instagram-standalone']).optional(),
|
|
8
15
|
post_type: z.enum(['post', 'feed', 'story', 'reel', 'carousel']).optional(),
|
|
@@ -19,6 +26,7 @@ export const instagramSettingsSchema = z.object({
|
|
|
19
26
|
.describe('Native clickable media tags, not caption @mentions. Supported by eligible direct Instagram and Meta-linked connections; feed images, Reels/video, and Stories. Tags apply to each carousel item and the first Story in a Story Series.'),
|
|
20
27
|
first_comment: z.string().optional(),
|
|
21
28
|
media_alt_texts: z.record(z.string(), z.string()).optional(),
|
|
29
|
+
media_accessibility: mediaAccessibilitySchema.optional(),
|
|
22
30
|
reel_cover_url: z.string().optional(),
|
|
23
31
|
reel_thumb_offset: z.number().nonnegative().optional(),
|
|
24
32
|
is_ai_generated: z.boolean().optional().describe('Label the parent Instagram media container as AI-generated. For carousels, set on the parent only.'),
|
|
@@ -30,6 +38,7 @@ export const platformSettingsSchema = z.object({
|
|
|
30
38
|
post_type: z.string().optional(),
|
|
31
39
|
content_type: z.string().optional(),
|
|
32
40
|
media_alt_texts: z.record(z.string(), z.string()).optional(),
|
|
41
|
+
media_accessibility: mediaAccessibilitySchema.optional(),
|
|
33
42
|
reel_cover_url: z.string().optional(),
|
|
34
43
|
reel_thumb_offset: z.number().nonnegative().optional(),
|
|
35
44
|
// X
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { PosterlyClient } from '../lib/api-client.js';
|
|
3
|
-
import {
|
|
3
|
+
import { mdKeyValue, mdTitle } from '../lib/format.js';
|
|
4
4
|
|
|
5
5
|
export const generateImageTool = {
|
|
6
6
|
name: 'generate_image',
|
|
7
7
|
description:
|
|
8
|
-
'
|
|
9
|
-
'COSTS CREDITS. Every call consumes part of the user\'s monthly AI image quota (or purchased credits once the quota is exhausted). Do NOT call speculatively - always describe the image you\'re about to generate (subject, style, aspect ratio) to the user and get confirmation before calling.\n\n' +
|
|
8
|
+
'Queue an AI image job via Posterly using Nano Banana (Gemini) or Grok Imagine Image 2.0 (xAI). Returns job_id. Poll get_image_job until status is completed, then pass urls to create_post as media_url / media_urls. Gemini thinking high does not change the credit price.\n\n' +
|
|
9
|
+
'COSTS CREDITS. Every call consumes part of the user\'s monthly AI image quota (or purchased credits once the quota is exhausted). Do NOT call speculatively - always describe the image you\'re about to generate (subject, style, aspect ratio, quality/thinking, resolution) to the user and get confirmation before calling.\n\n' +
|
|
10
10
|
'If the user is over their plan limit and has no credits, this tool returns a 402 with upgrade info. Surface that message verbatim - do not retry.\n\n' +
|
|
11
11
|
'Common aspect ratios by platform:\n' +
|
|
12
12
|
' • Instagram feed / LinkedIn: 1:1 (square) or 4:5 (portrait)\n' +
|
|
@@ -53,10 +53,19 @@ export const generateImageTool = {
|
|
|
53
53
|
.optional()
|
|
54
54
|
.describe('Output resolution. Default 1K. xAI supports 1K/2K only. Google flash: 10/15/23/35 credits at 512/1K/2K/4K; pro: 30 at 1K-2K, 55 at 4K.'),
|
|
55
55
|
quality: z
|
|
56
|
-
.enum(['low', 'medium'])
|
|
56
|
+
.enum(['low', 'medium', 'high'])
|
|
57
57
|
.optional()
|
|
58
|
-
.describe('
|
|
59
|
-
|
|
58
|
+
.describe('Google: high turns on Gemini thinking (dashboard thinkingLevel=high). low/medium leave thinking minimal unless thinking_level is set. xAI: low or medium credit tiers; high is invalid.'),
|
|
59
|
+
thinking_level: z
|
|
60
|
+
.enum(['minimal', 'high'])
|
|
61
|
+
.optional()
|
|
62
|
+
.describe('Google flash/lite only. Gemini image quality control. minimal is fastest; high is for infographics, grounded scenes, and harder layouts. Pro reasons automatically. Overrides quality when both are set.'),
|
|
63
|
+
reference_image_urls: z
|
|
64
|
+
.array(z.string().url())
|
|
65
|
+
.max(14)
|
|
66
|
+
.optional()
|
|
67
|
+
.describe('Google only. Up to 14 HTTPS image URLs used as references (logo, product, style lock). Same as dashboard reference images.'),
|
|
68
|
+
confirm: z.literal(true).describe('Must be true after explicit user confirmation of subject, style, aspect ratio, quality, and credit use.'),
|
|
60
69
|
}),
|
|
61
70
|
|
|
62
71
|
async execute(
|
|
@@ -69,7 +78,9 @@ export const generateImageTool = {
|
|
|
69
78
|
provider?: 'google' | 'xai';
|
|
70
79
|
model?: 'lite' | 'flash' | 'pro';
|
|
71
80
|
resolution?: '512' | '1K' | '2K' | '4K';
|
|
72
|
-
quality?: 'low' | 'medium';
|
|
81
|
+
quality?: 'low' | 'medium' | 'high';
|
|
82
|
+
thinking_level?: 'minimal' | 'high';
|
|
83
|
+
reference_image_urls?: string[];
|
|
73
84
|
confirm: true;
|
|
74
85
|
}
|
|
75
86
|
) {
|
|
@@ -80,23 +91,16 @@ export const generateImageTool = {
|
|
|
80
91
|
const result = await client.generateImage(payload);
|
|
81
92
|
|
|
82
93
|
return [
|
|
83
|
-
mdTitle(
|
|
84
|
-
mdTable(
|
|
85
|
-
['#', 'Image URL', 'Filename'],
|
|
86
|
-
result.images.map((img, index) => [
|
|
87
|
-
index + 1,
|
|
88
|
-
img.url,
|
|
89
|
-
img.filename,
|
|
90
|
-
]),
|
|
91
|
-
),
|
|
94
|
+
mdTitle('Image job queued', `Job: ${result.job_id}`),
|
|
92
95
|
mdKeyValue([
|
|
93
|
-
['
|
|
96
|
+
['Status', result.status],
|
|
97
|
+
['Model', result.model],
|
|
98
|
+
['Resolution', result.resolution],
|
|
99
|
+
['Thinking', result.thinking_level || undefined],
|
|
94
100
|
['Credits used', result.credits_used],
|
|
95
|
-
['
|
|
96
|
-
['Plan tier', result.usage.tier || undefined],
|
|
101
|
+
['Billed from', result.usage?.billed_from],
|
|
97
102
|
]),
|
|
98
|
-
result.
|
|
99
|
-
'**Next step:** Pass any URL above to `create_post` as `media_url`, or use multiple as `media_urls` for a carousel.',
|
|
103
|
+
result.message || 'Poll get_image_job with this job_id until status is completed, then pass urls to create_post.',
|
|
100
104
|
].filter(Boolean).join('\n\n');
|
|
101
105
|
},
|
|
102
106
|
};
|