posterly-mcp-server 0.40.1 → 0.43.1

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 CHANGED
@@ -122,7 +122,7 @@ Add the same server definition to your Cursor MCP settings:
122
122
 
123
123
  ## Available tools
124
124
 
125
- `posterly-mcp-server@0.40.1` exposes 89 tools.
125
+ `posterly-mcp-server@0.43.1` exposes 90 tools.
126
126
 
127
127
  Public setup tools work before `POSTERLY_API_KEY` exists:
128
128
 
@@ -180,7 +180,8 @@ Authenticated tools require `POSTERLY_API_KEY`:
180
180
  - `list_media`
181
181
  - `find_available_slot`
182
182
  - `generate_captions`
183
- - `generate_image`
183
+ - `generate_image` (queues a Railway job; Gemini thinking_level / quality high, resolution up to 4K, optional reference_image_urls)
184
+ - `get_image_job` (poll one job or list recent image jobs)
184
185
  - `get_video_options`
185
186
  - `run_video_function` (read-only Veo helpers for cost estimation and request validation)
186
187
  - `generate_video` (queues a cost-guarded Veo video job)
package/dist/index.js CHANGED
@@ -38,6 +38,7 @@ import { deletePostGroupTool } from './tools/delete-post-group.js';
38
38
  import { whoamiTool } from './tools/whoami.js';
39
39
  import { generateCaptionsTool } from './tools/generate-captions.js';
40
40
  import { generateImageTool } from './tools/generate-image.js';
41
+ import { getImageJobTool } from './tools/get-image-job.js';
41
42
  import { getVideoOptionsTool } from './tools/get-video-options.js';
42
43
  import { runVideoFunctionTool } from './tools/run-video-function.js';
43
44
  import { generateVideoTool } from './tools/generate-video.js';
@@ -576,6 +577,15 @@ server.tool(generateImageTool.name, generateImageTool.description, generateImage
576
577
  return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
577
578
  }
578
579
  });
580
+ server.tool(getImageJobTool.name, getImageJobTool.description, getImageJobTool.inputSchema.shape, getToolAnnotations(getImageJobTool.name), async (input) => {
581
+ try {
582
+ const text = await getImageJobTool.execute(client, input);
583
+ return { content: [{ type: 'text', text }] };
584
+ }
585
+ catch (err) {
586
+ return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
587
+ }
588
+ });
579
589
  server.tool(getPostTool.name, getPostTool.description, getPostTool.inputSchema.shape, getToolAnnotations(getPostTool.name), async (input) => {
580
590
  try {
581
591
  const text = await getPostTool.execute(client, input);
@@ -162,6 +162,12 @@ export interface InstagramPostSettings {
162
162
  }>;
163
163
  first_comment?: string;
164
164
  media_alt_texts?: Record<string, string>;
165
+ media_accessibility?: Array<{
166
+ index: number;
167
+ asset_id?: string;
168
+ source_url?: string;
169
+ alt_text: string;
170
+ }>;
165
171
  reel_cover_url?: string;
166
172
  reel_thumb_offset?: number;
167
173
  }
@@ -855,6 +861,28 @@ export interface PublicSignupResponse {
855
861
  export interface PublicSignupSessionResponse {
856
862
  signup_session: PublicSignupSession;
857
863
  }
864
+ export interface ImageJob {
865
+ id: string;
866
+ status: string;
867
+ provider: 'google' | 'xai';
868
+ prompt: string;
869
+ model: string;
870
+ resolution: string;
871
+ quality?: string | null;
872
+ thinking_level?: string | null;
873
+ variations: number;
874
+ urls: string[];
875
+ images: Array<{
876
+ url: string;
877
+ filename?: string;
878
+ path?: string;
879
+ }>;
880
+ error_message?: string | null;
881
+ credit_cost: number;
882
+ created_at: string;
883
+ started_at?: string | null;
884
+ completed_at?: string | null;
885
+ }
858
886
  export interface VideoJob {
859
887
  id: string;
860
888
  status: string;
@@ -1065,24 +1093,24 @@ export declare class PosterlyClient {
1065
1093
  provider?: 'google' | 'xai';
1066
1094
  model?: 'lite' | 'flash' | 'pro';
1067
1095
  resolution?: '512' | '1K' | '2K' | '4K';
1068
- quality?: 'low' | 'medium';
1096
+ quality?: 'low' | 'medium' | 'high';
1097
+ thinking_level?: 'minimal' | 'high';
1098
+ reference_image_urls?: string[];
1069
1099
  }): Promise<{
1070
- urls: string[];
1071
- images: Array<{
1072
- url: string;
1073
- filename: string;
1074
- path: string;
1075
- }>;
1100
+ job_id: string;
1101
+ status: string;
1102
+ message?: string;
1076
1103
  model: string;
1077
1104
  provider: 'google' | 'xai';
1105
+ resolution?: string;
1106
+ thinking_level?: 'minimal' | 'high' | null;
1078
1107
  credits_used: number;
1079
- warnings?: string[];
1080
- usage: {
1108
+ usage?: {
1081
1109
  used: number | null;
1082
1110
  limit: number | null;
1083
1111
  period: string | null;
1084
1112
  tier: string | null;
1085
- billed_from: 'plan_quota' | 'credits';
1113
+ billed_from: string;
1086
1114
  };
1087
1115
  }>;
1088
1116
  getVideoOptions(): Promise<Record<string, any>>;
@@ -1116,6 +1144,14 @@ export declare class PosterlyClient {
1116
1144
  job?: VideoJob;
1117
1145
  jobs?: VideoJob[];
1118
1146
  }>;
1147
+ getImageJob(params?: {
1148
+ job_id?: string;
1149
+ status?: string;
1150
+ limit?: number;
1151
+ }): Promise<{
1152
+ job?: ImageJob;
1153
+ jobs?: ImageJob[];
1154
+ }>;
1119
1155
  findAvailableSlots(params?: {
1120
1156
  account_ids?: string[];
1121
1157
  timezone?: string;
@@ -326,6 +326,18 @@ export class PosterlyClient {
326
326
  const qs = searchParams.toString();
327
327
  return this.request('GET', `/ai/video-jobs${qs ? `?${qs}` : ''}`);
328
328
  }
329
+ async getImageJob(params) {
330
+ if (params?.job_id) {
331
+ return this.request('GET', `/ai/image-jobs/${encodeURIComponent(params.job_id)}`);
332
+ }
333
+ const searchParams = new URLSearchParams();
334
+ if (params?.status)
335
+ searchParams.set('status', params.status);
336
+ if (params?.limit)
337
+ searchParams.set('limit', String(params.limit));
338
+ const qs = searchParams.toString();
339
+ return this.request('GET', `/ai/image-jobs${qs ? `?${qs}` : ''}`);
340
+ }
329
341
  async findAvailableSlots(params) {
330
342
  const searchParams = new URLSearchParams();
331
343
  if (params?.account_ids?.length)
@@ -1 +1 @@
1
- export declare const POSTERLY_MCP_VERSION = "0.40.1";
1
+ export declare const POSTERLY_MCP_VERSION = "0.43.1";
@@ -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.40.1';
8
+ export const POSTERLY_MCP_VERSION = '0.43.1';
@@ -14,16 +14,16 @@ export declare const addGoogleBusinessMediaTool: {
14
14
  confirm: z.ZodLiteral<true>;
15
15
  }, "strip", z.ZodTypeAny, {
16
16
  confirm: true;
17
- category: "COVER" | "PROFILE" | "LOGO" | "EXTERIOR" | "INTERIOR" | "PRODUCT" | "AT_WORK" | "FOOD_AND_DRINK" | "MENU" | "COMMON_AREA" | "ROOMS" | "TEAMS" | "ADDITIONAL";
18
17
  source_url: string;
18
+ category: "COVER" | "PROFILE" | "LOGO" | "EXTERIOR" | "INTERIOR" | "PRODUCT" | "AT_WORK" | "FOOD_AND_DRINK" | "MENU" | "COMMON_AREA" | "ROOMS" | "TEAMS" | "ADDITIONAL";
19
19
  workspace_id?: string | undefined;
20
20
  account_id?: number | undefined;
21
21
  location_id?: string | undefined;
22
22
  media_format?: "PHOTO" | "VIDEO" | undefined;
23
23
  }, {
24
24
  confirm: true;
25
- category: "COVER" | "PROFILE" | "LOGO" | "EXTERIOR" | "INTERIOR" | "PRODUCT" | "AT_WORK" | "FOOD_AND_DRINK" | "MENU" | "COMMON_AREA" | "ROOMS" | "TEAMS" | "ADDITIONAL";
26
25
  source_url: string;
26
+ category: "COVER" | "PROFILE" | "LOGO" | "EXTERIOR" | "INTERIOR" | "PRODUCT" | "AT_WORK" | "FOOD_AND_DRINK" | "MENU" | "COMMON_AREA" | "ROOMS" | "TEAMS" | "ADDITIONAL";
27
27
  workspace_id?: string | undefined;
28
28
  account_id?: number | undefined;
29
29
  location_id?: string | undefined;