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.
- package/README.md +2 -1
- package/RELEASING.md +103 -0
- package/dist/index.js +10 -0
- package/dist/lib/api-client.d.ts +41 -1
- 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/connect-account.d.ts +59 -0
- package/dist/tools/connect-account.js +75 -0
- package/dist/tools/create-post.d.ts +56 -56
- package/dist/tools/create-posts-batch.d.ts +24 -24
- package/dist/tools/get-connect-link.d.ts +2 -2
- package/dist/tools/get-connect-link.js +1 -1
- package/dist/tools/get-platform-schema.d.ts +2 -2
- package/dist/tools/list-google-business-reviews.d.ts +8 -0
- package/dist/tools/list-google-business-reviews.js +87 -7
- package/dist/tools/list-posts.d.ts +2 -2
- package/dist/tools/update-post.d.ts +20 -20
- package/dist/tools/validate-post.d.ts +32 -32
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/index.ts +16 -0
- package/src/lib/api-client.ts +52 -1
- package/src/lib/version.ts +1 -1
- package/src/tools/connect-account.ts +91 -0
- package/src/tools/get-connect-link.ts +1 -1
- package/src/tools/list-google-business-reviews.ts +101 -8
- package/tool-annotations.json +3 -0
|
@@ -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
|
-
|
|
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
|
|
18
|
-
|
|
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
|
|
23
|
-
const replied = review.reviewReply ? '
|
|
24
|
-
lines.push(`- ${name} (${rating}, ${location}
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|