posterly-mcp-server 0.33.2 → 0.34.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.
@@ -8,12 +8,12 @@ export declare const getPlatformSchemaTool: {
8
8
  platform: z.ZodOptional<z.ZodEnum<["bluesky", "devto", "discord", "facebook", "gmb", "google-business", "google_business", "google_business_profile", "hashnode", "instagram", "instagram-standalone", "lemmy", "linkedin", "mastodon", "medium", "pinterest", "reddit", "skool", "slack", "telegram", "threads", "tiktok", "twitter", "whop", "wordpress", "x", "youtube"]>>;
9
9
  include_planned: z.ZodOptional<z.ZodBoolean>;
10
10
  }, "strip", z.ZodTypeAny, {
11
- include_planned?: boolean | undefined;
12
11
  platform?: "instagram" | "instagram-standalone" | "facebook" | "tiktok" | "twitter" | "threads" | "linkedin" | "youtube" | "pinterest" | "google_business" | "x" | "telegram" | "bluesky" | "discord" | "slack" | "mastodon" | "devto" | "hashnode" | "wordpress" | "lemmy" | "reddit" | "medium" | "skool" | "whop" | "gmb" | "google-business" | "google_business_profile" | undefined;
12
+ include_planned?: boolean | undefined;
13
13
  account_id?: string | undefined;
14
14
  }, {
15
- include_planned?: boolean | undefined;
16
15
  platform?: "instagram" | "instagram-standalone" | "facebook" | "tiktok" | "twitter" | "threads" | "linkedin" | "youtube" | "pinterest" | "google_business" | "x" | "telegram" | "bluesky" | "discord" | "slack" | "mastodon" | "devto" | "hashnode" | "wordpress" | "lemmy" | "reddit" | "medium" | "skool" | "whop" | "gmb" | "google-business" | "google_business_profile" | undefined;
16
+ include_planned?: boolean | undefined;
17
17
  account_id?: string | undefined;
18
18
  }>;
19
19
  execute(client: PosterlyClient, input: {
@@ -9,15 +9,21 @@ export declare const listGoogleBusinessReviewsTool: {
9
9
  location_id: z.ZodOptional<z.ZodString>;
10
10
  rating: z.ZodOptional<z.ZodNumber>;
11
11
  unanswered: z.ZodOptional<z.ZodBoolean>;
12
+ limit: z.ZodOptional<z.ZodNumber>;
13
+ offset: z.ZodOptional<z.ZodNumber>;
12
14
  }, "strip", z.ZodTypeAny, {
13
15
  workspace_id?: string | undefined;
14
16
  account_id?: number | undefined;
17
+ limit?: number | undefined;
18
+ offset?: number | undefined;
15
19
  location_id?: string | undefined;
16
20
  rating?: number | undefined;
17
21
  unanswered?: boolean | undefined;
18
22
  }, {
19
23
  workspace_id?: string | undefined;
20
24
  account_id?: number | undefined;
25
+ limit?: number | undefined;
26
+ offset?: number | undefined;
21
27
  location_id?: string | undefined;
22
28
  rating?: number | undefined;
23
29
  unanswered?: boolean | undefined;
@@ -28,5 +34,7 @@ export declare const listGoogleBusinessReviewsTool: {
28
34
  location_id?: string;
29
35
  rating?: number;
30
36
  unanswered?: boolean;
37
+ limit?: number;
38
+ offset?: number;
31
39
  }): Promise<string>;
32
40
  };
@@ -1,28 +1,108 @@
1
1
  import { z } from 'zod';
2
+ import { formatDate } from '../lib/format.js';
3
+ /** Matches GOOGLE_BUSINESS_REVIEWS_MAX_LIMIT in lib/api-v1-google-business.ts. */
4
+ const MAX_LIMIT = 1000;
2
5
  export const listGoogleBusinessReviewsTool = {
3
6
  name: 'list_google_business_reviews',
4
- description: 'List Google Business Profile reviews for one location/account or every accessible GBP location. Supports rating and unanswered-only filters.',
7
+ description: 'List Google Business Profile reviews for one location/account or every accessible GBP location. Pages through all reviews Google has (not just the first 50), returns the full untruncated review text with its date, and reports each location\'s total review count. Supports rating and unanswered-only filters plus limit/offset paging.',
5
8
  inputSchema: z.object({
6
9
  workspace_id: z.string().optional().describe('Filter to a workspace ID from whoami.'),
7
10
  account_id: z.number().int().positive().optional().describe('Google Business account ID from list_accounts.'),
8
11
  location_id: z.string().optional().describe('Google Business numeric location id (the location_id/platform_user_id from list_accounts, e.g. "197940849675145390"). NOT the ChIJ... Place ID returned by get_google_business_review_link. Prefer account_id.'),
9
12
  rating: z.number().int().min(1).max(5).optional().describe('Filter to a 1-5 star rating.'),
10
13
  unanswered: z.boolean().optional().describe('Only return reviews without owner replies.'),
14
+ limit: z
15
+ .number()
16
+ .int()
17
+ .min(1)
18
+ .max(MAX_LIMIT)
19
+ .optional()
20
+ .describe(`Maximum reviews to return in this call (default 200, max ${MAX_LIMIT}). Every returned review is listed in full.`),
21
+ offset: z
22
+ .number()
23
+ .int()
24
+ .min(0)
25
+ .optional()
26
+ .describe('Skip this many reviews before returning results. Use with limit to page through a location with more reviews than one call returns.'),
11
27
  }),
12
28
  async execute(client, input) {
13
29
  const result = await client.listGoogleBusinessReviews(input);
30
+ const locations = (result.locations || []);
31
+ const offset = result.offset ?? 0;
14
32
  if (result.reviews.length === 0) {
15
- return 'No Google Business reviews found matching your filters.';
33
+ // Distinguish "no reviews exist" from "we couldn't read them" — a silent
34
+ // zero used to be indistinguishable from a broken connection.
35
+ const lines = ['No Google Business reviews found matching your filters.'];
36
+ const locationLines = locations.map((location) => formatLocationLine(location));
37
+ if (locationLines.length > 0) {
38
+ lines.push('', 'Locations checked:', ...locationLines);
39
+ }
40
+ return lines.join('\n');
16
41
  }
17
- const lines = [`Google Business reviews (${result.reviews.length} of ${result.total}):`];
18
- for (const review of result.reviews.slice(0, 25)) {
42
+ const header = [`Google Business reviews (showing ${result.reviews.length} of ${result.total} matching`];
43
+ if (offset > 0)
44
+ header.push(`, from offset ${offset}`);
45
+ if (typeof result.total_review_count === 'number') {
46
+ header.push(`; ${result.total_review_count} total on Google`);
47
+ }
48
+ header.push('):');
49
+ const lines = [header.join('')];
50
+ for (const location of locations) {
51
+ if (location.error) {
52
+ lines.push(`! ${location.business_name || location.name || location.location_id || 'location'}: ${location.error}`);
53
+ }
54
+ }
55
+ lines.push('');
56
+ for (const review of result.reviews) {
19
57
  const name = review.reviewer?.displayName || 'Anonymous';
20
58
  const rating = review.starRating ? `${review.starRating} stars` : 'unrated';
21
59
  const location = review.businessName || review.locationName || review.locationId || 'location';
22
- const text = review.comment ? ` - ${review.comment.replace(/\s+/g, ' ').slice(0, 180)}` : '';
23
- const replied = review.reviewReply ? ' replied' : ' unanswered';
24
- lines.push(`- ${name} (${rating}, ${location},${replied})${text}`);
60
+ const date = formatReviewDate(review);
61
+ const replied = review.reviewReply ? 'replied' : 'unanswered';
62
+ lines.push(`- ${name} (${rating}, ${date}, ${location}, ${replied})`);
63
+ // Full review text, no truncation — collapse whitespace only so the
64
+ // bullet list stays readable for multi-paragraph reviews.
65
+ if (review.comment) {
66
+ lines.push(` ${review.comment.replace(/\s+/g, ' ').trim()}`);
67
+ }
68
+ }
69
+ if (result.has_more) {
70
+ const nextOffset = offset + result.reviews.length;
71
+ lines.push('', `More reviews available — call again with offset: ${nextOffset} to continue.`);
25
72
  }
73
+ lines.push('', 'Locations:', ...locations.map((location) => formatLocationLine(location)));
26
74
  return lines.join('\n');
27
75
  },
28
76
  };
77
+ /**
78
+ * When a review was written, plus when it was last edited if that differs.
79
+ * The list is ordered by last activity (updateTime), so showing only the
80
+ * original date would make an edited review look out of order.
81
+ */
82
+ function formatReviewDate(review) {
83
+ const created = review.createTime || review.updateTime;
84
+ const createdLabel = formatDate(created);
85
+ if (!review.updateTime || !review.createTime)
86
+ return createdLabel;
87
+ const updatedLabel = formatDate(review.updateTime);
88
+ if (updatedLabel === createdLabel)
89
+ return createdLabel;
90
+ return `${createdLabel}, edited ${updatedLabel}`;
91
+ }
92
+ function formatLocationLine(location) {
93
+ const label = location.business_name || location.name || location.location_id || `account ${location.id}`;
94
+ const parts = [];
95
+ if (typeof location.total_review_count === 'number') {
96
+ parts.push(`${location.total_review_count} reviews on Google`);
97
+ }
98
+ else if (!location.error) {
99
+ parts.push('review count not reported by Google');
100
+ }
101
+ if (typeof location.average_rating === 'number') {
102
+ parts.push(`${location.average_rating.toFixed(1)} avg`);
103
+ }
104
+ parts.push(`${location.fetched_review_count} fetched`);
105
+ if (location.error)
106
+ parts.push(`ERROR: ${location.error}`);
107
+ return `- ${label} (account_id ${location.id}): ${parts.join(', ')}`;
108
+ }
@@ -10,15 +10,15 @@ export declare const listPostsTool: {
10
10
  limit: z.ZodOptional<z.ZodNumber>;
11
11
  workspace_id: z.ZodOptional<z.ZodString>;
12
12
  }, "strip", z.ZodTypeAny, {
13
+ platform?: "instagram" | "instagram-standalone" | "facebook" | "tiktok" | "twitter" | "threads" | "linkedin" | "youtube" | "pinterest" | "google_business" | "x" | "telegram" | "bluesky" | "discord" | "slack" | "mastodon" | "devto" | "hashnode" | "wordpress" | "lemmy" | "gmb" | "google-business" | "google_business_profile" | undefined;
13
14
  status?: string | undefined;
14
15
  workspace_id?: string | undefined;
15
- platform?: "instagram" | "instagram-standalone" | "facebook" | "tiktok" | "twitter" | "threads" | "linkedin" | "youtube" | "pinterest" | "google_business" | "x" | "telegram" | "bluesky" | "discord" | "slack" | "mastodon" | "devto" | "hashnode" | "wordpress" | "lemmy" | "gmb" | "google-business" | "google_business_profile" | undefined;
16
16
  account_id?: string | undefined;
17
17
  limit?: number | undefined;
18
18
  }, {
19
+ platform?: "instagram" | "instagram-standalone" | "facebook" | "tiktok" | "twitter" | "threads" | "linkedin" | "youtube" | "pinterest" | "google_business" | "x" | "telegram" | "bluesky" | "discord" | "slack" | "mastodon" | "devto" | "hashnode" | "wordpress" | "lemmy" | "gmb" | "google-business" | "google_business_profile" | undefined;
19
20
  status?: string | undefined;
20
21
  workspace_id?: string | undefined;
21
- platform?: "instagram" | "instagram-standalone" | "facebook" | "tiktok" | "twitter" | "threads" | "linkedin" | "youtube" | "pinterest" | "google_business" | "x" | "telegram" | "bluesky" | "discord" | "slack" | "mastodon" | "devto" | "hashnode" | "wordpress" | "lemmy" | "gmb" | "google-business" | "google_business_profile" | undefined;
22
22
  account_id?: string | undefined;
23
23
  limit?: number | undefined;
24
24
  }>;
@@ -10,12 +10,12 @@ declare const instagramSettingsSchema: z.ZodObject<{
10
10
  username: z.ZodOptional<z.ZodString>;
11
11
  handle: z.ZodOptional<z.ZodString>;
12
12
  }, "strip", z.ZodTypeAny, {
13
- label?: string | undefined;
14
13
  username?: string | undefined;
14
+ label?: string | undefined;
15
15
  handle?: string | undefined;
16
16
  }, {
17
- label?: string | undefined;
18
17
  username?: string | undefined;
18
+ label?: string | undefined;
19
19
  handle?: string | undefined;
20
20
  }>]>, "many">>;
21
21
  user_tags: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
@@ -23,12 +23,12 @@ declare const instagramSettingsSchema: z.ZodObject<{
23
23
  label: z.ZodOptional<z.ZodString>;
24
24
  handle: z.ZodOptional<z.ZodString>;
25
25
  }, "strip", z.ZodTypeAny, {
26
- label?: string | undefined;
27
26
  username?: string | undefined;
27
+ label?: string | undefined;
28
28
  handle?: string | undefined;
29
29
  }, {
30
- label?: string | undefined;
31
30
  username?: string | undefined;
31
+ label?: string | undefined;
32
32
  handle?: string | undefined;
33
33
  }>]>, "many">>;
34
34
  first_comment: z.ZodOptional<z.ZodString>;
@@ -45,13 +45,13 @@ declare const instagramSettingsSchema: z.ZodObject<{
45
45
  is_trial_reel?: boolean | undefined;
46
46
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
47
47
  collaborators?: (string | {
48
- label?: string | undefined;
49
48
  username?: string | undefined;
49
+ label?: string | undefined;
50
50
  handle?: string | undefined;
51
51
  })[] | undefined;
52
52
  user_tags?: (string | {
53
- label?: string | undefined;
54
53
  username?: string | undefined;
54
+ label?: string | undefined;
55
55
  handle?: string | undefined;
56
56
  })[] | undefined;
57
57
  first_comment?: string | undefined;
@@ -65,13 +65,13 @@ declare const instagramSettingsSchema: z.ZodObject<{
65
65
  is_trial_reel?: boolean | undefined;
66
66
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
67
67
  collaborators?: (string | {
68
- label?: string | undefined;
69
68
  username?: string | undefined;
69
+ label?: string | undefined;
70
70
  handle?: string | undefined;
71
71
  })[] | undefined;
72
72
  user_tags?: (string | {
73
- label?: string | undefined;
74
73
  username?: string | undefined;
74
+ label?: string | undefined;
75
75
  handle?: string | undefined;
76
76
  })[] | undefined;
77
77
  first_comment?: string | undefined;
@@ -332,12 +332,12 @@ export declare const updatePostTool: {
332
332
  username: z.ZodOptional<z.ZodString>;
333
333
  handle: z.ZodOptional<z.ZodString>;
334
334
  }, "strip", z.ZodTypeAny, {
335
- label?: string | undefined;
336
335
  username?: string | undefined;
336
+ label?: string | undefined;
337
337
  handle?: string | undefined;
338
338
  }, {
339
- label?: string | undefined;
340
339
  username?: string | undefined;
340
+ label?: string | undefined;
341
341
  handle?: string | undefined;
342
342
  }>]>, "many">>;
343
343
  user_tags: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
@@ -345,12 +345,12 @@ export declare const updatePostTool: {
345
345
  label: z.ZodOptional<z.ZodString>;
346
346
  handle: z.ZodOptional<z.ZodString>;
347
347
  }, "strip", z.ZodTypeAny, {
348
- label?: string | undefined;
349
348
  username?: string | undefined;
349
+ label?: string | undefined;
350
350
  handle?: string | undefined;
351
351
  }, {
352
- label?: string | undefined;
353
352
  username?: string | undefined;
353
+ label?: string | undefined;
354
354
  handle?: string | undefined;
355
355
  }>]>, "many">>;
356
356
  first_comment: z.ZodOptional<z.ZodString>;
@@ -367,13 +367,13 @@ export declare const updatePostTool: {
367
367
  is_trial_reel?: boolean | undefined;
368
368
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
369
369
  collaborators?: (string | {
370
- label?: string | undefined;
371
370
  username?: string | undefined;
371
+ label?: string | undefined;
372
372
  handle?: string | undefined;
373
373
  })[] | undefined;
374
374
  user_tags?: (string | {
375
- label?: string | undefined;
376
375
  username?: string | undefined;
376
+ label?: string | undefined;
377
377
  handle?: string | undefined;
378
378
  })[] | undefined;
379
379
  first_comment?: string | undefined;
@@ -387,13 +387,13 @@ export declare const updatePostTool: {
387
387
  is_trial_reel?: boolean | undefined;
388
388
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
389
389
  collaborators?: (string | {
390
- label?: string | undefined;
391
390
  username?: string | undefined;
391
+ label?: string | undefined;
392
392
  handle?: string | undefined;
393
393
  })[] | undefined;
394
394
  user_tags?: (string | {
395
- label?: string | undefined;
396
395
  username?: string | undefined;
396
+ label?: string | undefined;
397
397
  handle?: string | undefined;
398
398
  })[] | undefined;
399
399
  first_comment?: string | undefined;
@@ -652,13 +652,13 @@ export declare const updatePostTool: {
652
652
  is_trial_reel?: boolean | undefined;
653
653
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
654
654
  collaborators?: (string | {
655
- label?: string | undefined;
656
655
  username?: string | undefined;
656
+ label?: string | undefined;
657
657
  handle?: string | undefined;
658
658
  })[] | undefined;
659
659
  user_tags?: (string | {
660
- label?: string | undefined;
661
660
  username?: string | undefined;
661
+ label?: string | undefined;
662
662
  handle?: string | undefined;
663
663
  })[] | undefined;
664
664
  first_comment?: string | undefined;
@@ -762,13 +762,13 @@ export declare const updatePostTool: {
762
762
  is_trial_reel?: boolean | undefined;
763
763
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
764
764
  collaborators?: (string | {
765
- label?: string | undefined;
766
765
  username?: string | undefined;
766
+ label?: string | undefined;
767
767
  handle?: string | undefined;
768
768
  })[] | undefined;
769
769
  user_tags?: (string | {
770
- label?: string | undefined;
771
770
  username?: string | undefined;
771
+ label?: string | undefined;
772
772
  handle?: string | undefined;
773
773
  })[] | undefined;
774
774
  first_comment?: string | undefined;
@@ -20,12 +20,12 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
20
20
  username: import("zod").ZodOptional<import("zod").ZodString>;
21
21
  handle: import("zod").ZodOptional<import("zod").ZodString>;
22
22
  }, "strip", import("zod").ZodTypeAny, {
23
- label?: string | undefined;
24
23
  username?: string | undefined;
24
+ label?: string | undefined;
25
25
  handle?: string | undefined;
26
26
  }, {
27
- label?: string | undefined;
28
27
  username?: string | undefined;
28
+ label?: string | undefined;
29
29
  handle?: string | undefined;
30
30
  }>]>, "many">>;
31
31
  user_tags: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnion<[import("zod").ZodString, import("zod").ZodObject<{
@@ -33,12 +33,12 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
33
33
  label: import("zod").ZodOptional<import("zod").ZodString>;
34
34
  handle: import("zod").ZodOptional<import("zod").ZodString>;
35
35
  }, "strip", import("zod").ZodTypeAny, {
36
- label?: string | undefined;
37
36
  username?: string | undefined;
37
+ label?: string | undefined;
38
38
  handle?: string | undefined;
39
39
  }, {
40
- label?: string | undefined;
41
40
  username?: string | undefined;
41
+ label?: string | undefined;
42
42
  handle?: string | undefined;
43
43
  }>]>, "many">>;
44
44
  first_comment: import("zod").ZodOptional<import("zod").ZodString>;
@@ -53,13 +53,13 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
53
53
  is_trial_reel?: boolean | undefined;
54
54
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
55
55
  collaborators?: (string | {
56
- label?: string | undefined;
57
56
  username?: string | undefined;
57
+ label?: string | undefined;
58
58
  handle?: string | undefined;
59
59
  })[] | undefined;
60
60
  user_tags?: (string | {
61
- label?: string | undefined;
62
61
  username?: string | undefined;
62
+ label?: string | undefined;
63
63
  handle?: string | undefined;
64
64
  })[] | undefined;
65
65
  first_comment?: string | undefined;
@@ -72,13 +72,13 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
72
72
  is_trial_reel?: boolean | undefined;
73
73
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
74
74
  collaborators?: (string | {
75
- label?: string | undefined;
76
75
  username?: string | undefined;
76
+ label?: string | undefined;
77
77
  handle?: string | undefined;
78
78
  })[] | undefined;
79
79
  user_tags?: (string | {
80
- label?: string | undefined;
81
80
  username?: string | undefined;
81
+ label?: string | undefined;
82
82
  handle?: string | undefined;
83
83
  })[] | undefined;
84
84
  first_comment?: string | undefined;
@@ -318,14 +318,14 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
318
318
  }, import("zod").ZodTypeAny, "passthrough">>>;
319
319
  workspace_id: import("zod").ZodOptional<import("zod").ZodString>;
320
320
  }, "strip", import("zod").ZodTypeAny, {
321
- workspace_id?: string | undefined;
322
321
  platform?: "instagram" | "instagram-standalone" | "facebook" | "tiktok" | "twitter" | "threads" | "linkedin" | "youtube" | "pinterest" | "google_business" | "x" | "telegram" | "bluesky" | "discord" | "slack" | "mastodon" | "devto" | "hashnode" | "wordpress" | "lemmy" | "gmb" | "google-business" | "google_business_profile" | undefined;
322
+ username?: string | undefined;
323
+ workspace_id?: string | undefined;
323
324
  account_id?: string | undefined;
324
325
  scheduled_at?: string | undefined;
325
326
  media_url?: string | undefined;
326
327
  media_urls?: string[] | undefined;
327
328
  post_type?: string | undefined;
328
- username?: string | undefined;
329
329
  caption?: string | undefined;
330
330
  thread_posts?: string[] | undefined;
331
331
  instagram_settings?: {
@@ -336,13 +336,13 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
336
336
  is_trial_reel?: boolean | undefined;
337
337
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
338
338
  collaborators?: (string | {
339
- label?: string | undefined;
340
339
  username?: string | undefined;
340
+ label?: string | undefined;
341
341
  handle?: string | undefined;
342
342
  })[] | undefined;
343
343
  user_tags?: (string | {
344
- label?: string | undefined;
345
344
  username?: string | undefined;
345
+ label?: string | undefined;
346
346
  handle?: string | undefined;
347
347
  })[] | undefined;
348
348
  first_comment?: string | undefined;
@@ -427,14 +427,14 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
427
427
  ai_generated: import("zod").ZodOptional<import("zod").ZodBoolean>;
428
428
  }, import("zod").ZodTypeAny, "passthrough"> | undefined;
429
429
  }, {
430
- workspace_id?: string | undefined;
431
430
  platform?: "instagram" | "instagram-standalone" | "facebook" | "tiktok" | "twitter" | "threads" | "linkedin" | "youtube" | "pinterest" | "google_business" | "x" | "telegram" | "bluesky" | "discord" | "slack" | "mastodon" | "devto" | "hashnode" | "wordpress" | "lemmy" | "gmb" | "google-business" | "google_business_profile" | undefined;
431
+ username?: string | undefined;
432
+ workspace_id?: string | undefined;
432
433
  account_id?: string | undefined;
433
434
  scheduled_at?: string | undefined;
434
435
  media_url?: string | undefined;
435
436
  media_urls?: string[] | undefined;
436
437
  post_type?: string | undefined;
437
- username?: string | undefined;
438
438
  caption?: string | undefined;
439
439
  thread_posts?: string[] | undefined;
440
440
  instagram_settings?: {
@@ -445,13 +445,13 @@ export declare const validatePostInputSchema: import("zod").ZodObject<{
445
445
  is_trial_reel?: boolean | undefined;
446
446
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
447
447
  collaborators?: (string | {
448
- label?: string | undefined;
449
448
  username?: string | undefined;
449
+ label?: string | undefined;
450
450
  handle?: string | undefined;
451
451
  })[] | undefined;
452
452
  user_tags?: (string | {
453
- label?: string | undefined;
454
453
  username?: string | undefined;
454
+ label?: string | undefined;
455
455
  handle?: string | undefined;
456
456
  })[] | undefined;
457
457
  first_comment?: string | undefined;
@@ -560,12 +560,12 @@ export declare const validatePostTool: {
560
560
  username: import("zod").ZodOptional<import("zod").ZodString>;
561
561
  handle: import("zod").ZodOptional<import("zod").ZodString>;
562
562
  }, "strip", import("zod").ZodTypeAny, {
563
- label?: string | undefined;
564
563
  username?: string | undefined;
564
+ label?: string | undefined;
565
565
  handle?: string | undefined;
566
566
  }, {
567
- label?: string | undefined;
568
567
  username?: string | undefined;
568
+ label?: string | undefined;
569
569
  handle?: string | undefined;
570
570
  }>]>, "many">>;
571
571
  user_tags: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodUnion<[import("zod").ZodString, import("zod").ZodObject<{
@@ -573,12 +573,12 @@ export declare const validatePostTool: {
573
573
  label: import("zod").ZodOptional<import("zod").ZodString>;
574
574
  handle: import("zod").ZodOptional<import("zod").ZodString>;
575
575
  }, "strip", import("zod").ZodTypeAny, {
576
- label?: string | undefined;
577
576
  username?: string | undefined;
577
+ label?: string | undefined;
578
578
  handle?: string | undefined;
579
579
  }, {
580
- label?: string | undefined;
581
580
  username?: string | undefined;
581
+ label?: string | undefined;
582
582
  handle?: string | undefined;
583
583
  }>]>, "many">>;
584
584
  first_comment: import("zod").ZodOptional<import("zod").ZodString>;
@@ -593,13 +593,13 @@ export declare const validatePostTool: {
593
593
  is_trial_reel?: boolean | undefined;
594
594
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
595
595
  collaborators?: (string | {
596
- label?: string | undefined;
597
596
  username?: string | undefined;
597
+ label?: string | undefined;
598
598
  handle?: string | undefined;
599
599
  })[] | undefined;
600
600
  user_tags?: (string | {
601
- label?: string | undefined;
602
601
  username?: string | undefined;
602
+ label?: string | undefined;
603
603
  handle?: string | undefined;
604
604
  })[] | undefined;
605
605
  first_comment?: string | undefined;
@@ -612,13 +612,13 @@ export declare const validatePostTool: {
612
612
  is_trial_reel?: boolean | undefined;
613
613
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
614
614
  collaborators?: (string | {
615
- label?: string | undefined;
616
615
  username?: string | undefined;
616
+ label?: string | undefined;
617
617
  handle?: string | undefined;
618
618
  })[] | undefined;
619
619
  user_tags?: (string | {
620
- label?: string | undefined;
621
620
  username?: string | undefined;
621
+ label?: string | undefined;
622
622
  handle?: string | undefined;
623
623
  })[] | undefined;
624
624
  first_comment?: string | undefined;
@@ -858,14 +858,14 @@ export declare const validatePostTool: {
858
858
  }, import("zod").ZodTypeAny, "passthrough">>>;
859
859
  workspace_id: import("zod").ZodOptional<import("zod").ZodString>;
860
860
  }, "strip", import("zod").ZodTypeAny, {
861
- workspace_id?: string | undefined;
862
861
  platform?: "instagram" | "instagram-standalone" | "facebook" | "tiktok" | "twitter" | "threads" | "linkedin" | "youtube" | "pinterest" | "google_business" | "x" | "telegram" | "bluesky" | "discord" | "slack" | "mastodon" | "devto" | "hashnode" | "wordpress" | "lemmy" | "gmb" | "google-business" | "google_business_profile" | undefined;
862
+ username?: string | undefined;
863
+ workspace_id?: string | undefined;
863
864
  account_id?: string | undefined;
864
865
  scheduled_at?: string | undefined;
865
866
  media_url?: string | undefined;
866
867
  media_urls?: string[] | undefined;
867
868
  post_type?: string | undefined;
868
- username?: string | undefined;
869
869
  caption?: string | undefined;
870
870
  thread_posts?: string[] | undefined;
871
871
  instagram_settings?: {
@@ -876,13 +876,13 @@ export declare const validatePostTool: {
876
876
  is_trial_reel?: boolean | undefined;
877
877
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
878
878
  collaborators?: (string | {
879
- label?: string | undefined;
880
879
  username?: string | undefined;
880
+ label?: string | undefined;
881
881
  handle?: string | undefined;
882
882
  })[] | undefined;
883
883
  user_tags?: (string | {
884
- label?: string | undefined;
885
884
  username?: string | undefined;
885
+ label?: string | undefined;
886
886
  handle?: string | undefined;
887
887
  })[] | undefined;
888
888
  first_comment?: string | undefined;
@@ -967,14 +967,14 @@ export declare const validatePostTool: {
967
967
  ai_generated: import("zod").ZodOptional<import("zod").ZodBoolean>;
968
968
  }, import("zod").ZodTypeAny, "passthrough"> | undefined;
969
969
  }, {
970
- workspace_id?: string | undefined;
971
970
  platform?: "instagram" | "instagram-standalone" | "facebook" | "tiktok" | "twitter" | "threads" | "linkedin" | "youtube" | "pinterest" | "google_business" | "x" | "telegram" | "bluesky" | "discord" | "slack" | "mastodon" | "devto" | "hashnode" | "wordpress" | "lemmy" | "gmb" | "google-business" | "google_business_profile" | undefined;
971
+ username?: string | undefined;
972
+ workspace_id?: string | undefined;
972
973
  account_id?: string | undefined;
973
974
  scheduled_at?: string | undefined;
974
975
  media_url?: string | undefined;
975
976
  media_urls?: string[] | undefined;
976
977
  post_type?: string | undefined;
977
- username?: string | undefined;
978
978
  caption?: string | undefined;
979
979
  thread_posts?: string[] | undefined;
980
980
  instagram_settings?: {
@@ -985,13 +985,13 @@ export declare const validatePostTool: {
985
985
  is_trial_reel?: boolean | undefined;
986
986
  graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
987
987
  collaborators?: (string | {
988
- label?: string | undefined;
989
988
  username?: string | undefined;
989
+ label?: string | undefined;
990
990
  handle?: string | undefined;
991
991
  })[] | undefined;
992
992
  user_tags?: (string | {
993
- label?: string | undefined;
994
993
  username?: string | undefined;
994
+ label?: string | undefined;
995
995
  handle?: string | undefined;
996
996
  })[] | undefined;
997
997
  first_comment?: string | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posterly-mcp-server",
3
- "version": "0.33.2",
3
+ "version": "0.34.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.33.2",
6
+ "version": "0.34.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.33.2",
17
+ "version": "0.34.0",
18
18
  "transport": {
19
19
  "type": "stdio"
20
20
  },
package/src/index.ts CHANGED
@@ -68,6 +68,7 @@ import { getXPostingQuotaTool } from './tools/get-x-posting-quota.js';
68
68
  import { createSignedUploadTool } from './tools/create-signed-upload.js';
69
69
  import { uploadMediaFromUrlTool } from './tools/upload-media-from-url.js';
70
70
  import { getConnectLinkTool } from './tools/get-connect-link.js';
71
+ import { connectAccountTool } from './tools/connect-account.js';
71
72
  import { createConnectSessionTool } from './tools/create-connect-session.js';
72
73
  import { getConnectSessionTool } from './tools/get-connect-session.js';
73
74
  import { createApiKeyTool } from './tools/create-api-key.js';
@@ -211,6 +212,21 @@ server.tool(
211
212
  }
212
213
  );
213
214
 
215
+ server.tool(
216
+ connectAccountTool.name,
217
+ connectAccountTool.description,
218
+ connectAccountTool.inputSchema.shape,
219
+ getToolAnnotations(connectAccountTool.name),
220
+ async (input) => {
221
+ try {
222
+ const text = await connectAccountTool.execute(client, input as any);
223
+ return { content: [{ type: 'text' as const, text }] };
224
+ } catch (err: any) {
225
+ return { content: [{ type: 'text' as const, text: `Error: ${err.message}` }], isError: true };
226
+ }
227
+ }
228
+ );
229
+
214
230
  server.tool(
215
231
  createConnectSessionTool.name,
216
232
  createConnectSessionTool.description,