@facelessad/mcp 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +14 -0
  2. package/index.js +33 -3
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -32,6 +32,11 @@ same block under `openclaw mcp` config and verify with
32
32
  | Tool | What it does |
33
33
  |------|--------------|
34
34
  | `facelessad_list_tools` | Registry: tools, styles, structures, hooks, durations |
35
+
36
+ Ask for a look of your own and the assistant sends `style: "custom"` plus
37
+ `custom_style` — `facelessad_list_tools` marks which tools accept it
38
+ (`supports.customStyle`). Product Showcase also takes `custom_graphics_style`
39
+ for the text layer drawn over the product video.
35
40
  | `facelessad_create_video` | Create an ad; returns an id immediately |
36
41
  | `facelessad_get_video` | Status + download URL when done |
37
42
  | `facelessad_list_videos` | Your videos, newest first |
@@ -41,3 +46,12 @@ same block under `openclaw mcp` config and verify with
41
46
 
42
47
  Videos build in the background (3–10 min); the assistant polls
43
48
  `facelessad_get_video`. You are only charged for steps that succeed.
49
+
50
+ ## 1.0.1
51
+
52
+ Seven tool-specific fields were reachable through the HTTP API but missing
53
+ from this package's schema, and the MCP SDK strips unknown keys — so an
54
+ assistant could not use them at all: `product_image_urls` (extra product
55
+ angles) and, for Video Banner, `texts`, `text_mode`, `background_image_url`,
56
+ `badge_image_url`, `badge` and `photo_query`. The schema now mirrors the
57
+ hosted connector at `/mcp` field for field.
package/index.js CHANGED
@@ -53,7 +53,7 @@ function result(data) {
53
53
  };
54
54
  }
55
55
 
56
- const server = new McpServer({ name: 'facelessad', version: '1.0.0' });
56
+ const server = new McpServer({ name: 'facelessad', version: '1.1.0' });
57
57
 
58
58
  server.tool(
59
59
  'facelessad_list_tools',
@@ -69,6 +69,13 @@ server.tool(
69
69
  async () => result(await api('GET', '/api/v1/balance'))
70
70
  );
71
71
 
72
+ server.tool(
73
+ 'facelessad_list_brand_kits',
74
+ 'The brands on this account: id, name, whether it is the default, how many of the 32 brand questions are answered, and whether it carries a colour and a logo. Call this before naming brand_kit_id — ids are per account and cannot be guessed.',
75
+ {},
76
+ async () => result(await api('GET', '/api/v1/brand-kits'))
77
+ );
78
+
72
79
  server.tool(
73
80
  'facelessad_voices',
74
81
  'The curated voice-over pool (id, name, gender, accent, language). Only these ids are accepted as a specific voice.',
@@ -95,8 +102,16 @@ const createShape = {
95
102
  duration: z.number().int().optional().describe('Seconds; per-tool bounds from the registry (default 30)'),
96
103
  aspect_ratio: z.string().optional().describe('"9:16" | "1:1" | "4:5" | "16:9" (default per tool)'),
97
104
  language: z.string().optional().describe('Default "English (US)"'),
98
- style: z.string().optional().describe('Style id for the tool (registry). Omit to let the server pick'),
99
- style_hint: z.string().optional().describe('Free-form style wish when no exact style id fits'),
105
+ style: z.string().optional().describe('Style id for the tool (registry). Omit to let the server pick. Use "custom" together with custom_style to describe a look of your own — facelessad_list_tools marks which tools accept it (supports.customStyle)'),
106
+ // 1.1.0 (§673): custom_style on ainoa kentta joka oikeasti vaihtaa videon
107
+ // ilmeen. style_hint ei tehnyt sita: se lisasi vain rivin materiaaleihin,
108
+ // ja skriptin visualDirection-saanto kieltaa nimenomaan taidetyylin
109
+ // kuvaamisen. Palvelin kohtelee style_hintia nyt custom_stylena silloin kun
110
+ // style on antamatta, joten vanha kutsu alkaa vihdoin tehda mita se lupasi.
111
+ custom_style: z.string().max(2000).optional().describe('Free-text description of the look you want, max 2000 chars. Requires style:"custom". What to describe depends on the tool: animated-ad / character / music-video / inspiration / motivational / slideshow -> the illustration or cinematic image style; motion-graphics / saas-ui-ad / text-animation / video-banner -> typography, palette and motion for graphics built in code; product-showcase -> how the product is filmed (put the text-graphics look in custom_graphics_style)'),
112
+ custom_graphics_style: z.string().max(2000).optional().describe('product-showcase only: how the text graphics rendered in code OVER the product video should look (typography, colors, contrast against the video). Optional — left out, it is derived from custom_style.'),
113
+ custom_style_refine: z.boolean().optional().describe('Default true: your description is expanded into a full style specification before the video is built. Set false to use your text verbatim — do that when reusing the customStyle returned by a previous video so a campaign keeps one look.'),
114
+ style_hint: z.string().optional().describe('Legacy alias: when no style is given, this is treated exactly like custom_style. Prefer custom_style.'),
100
115
  ad_structure: z.string().optional().describe('Ad structure id for the tool (registry)'),
101
116
  hook_formula: z.string().optional().describe('Hook formula id (registry)'),
102
117
  video_mode: z.enum(['continuous', 'cuts']).optional(),
@@ -112,9 +127,24 @@ const createShape = {
112
127
  sfx: z.boolean().optional(),
113
128
  captions: z.boolean().optional(),
114
129
  use_brand_kit: z.boolean().optional().describe('Default true'),
130
+ brand_kit_id: z.number().int().optional().describe('§640: which brand to use. Omit for the account default. Ids come from facelessad_list_brand_kits.'),
115
131
  use_winners: z.boolean().optional().describe('Default true'),
116
132
  name: z.string().optional().describe('Display name in My Files'),
117
133
  product_image_url: z.string().optional().describe('REQUIRED for product-showcase: public https URL of the product photo'),
134
+ // 1.0.1 (§639): nämä API on hyväksynyt alusta asti, mutta ne puuttuivat
135
+ // tästä skeemasta — ja koska SDK riisuu tuntemattomat avaimet, avustin ei
136
+ // voinut käyttää niitä lainkaan. Peilaa McpController::toolList():ia 1:1.
137
+ product_image_urls: z.array(z.string()).optional().describe('product-showcase only: up to 8 extra angle photos of the same product (https URLs). Helps the product keep its shape and label across clips.'),
138
+ texts: z.object({
139
+ headline: z.string().optional().describe('Max 80 characters'),
140
+ subline: z.string().optional().describe('Max 120 characters'),
141
+ cta_text: z.string().optional().describe('Max 30 characters'),
142
+ }).optional().describe('video-banner only: your own copy. Anything you leave out is written for you from the materials.'),
143
+ text_mode: z.enum(['simple', 'full']).optional().describe('video-banner only. "full" = your texts are used as-is and no AI writes copy (requires texts.headline). "simple" = all three are written for you (send no texts). Omit to have only the missing ones filled in.'),
144
+ background_image_url: z.string().optional().describe('video-banner only: https URL to use instead of the automatic photo pick'),
145
+ badge_image_url: z.string().optional().describe('video-banner only: https URL of a badge image. Wins over badge.'),
146
+ badge: z.enum(['none', 'random_face']).optional().describe('video-banner only: "random_face" picks the same AI face the app offers. Ignored when badge_image_url is set.'),
147
+ photo_query: z.string().optional().describe('video-banner only: steer the automatic background photo search, e.g. "nordic office"'),
118
148
  };
119
149
 
120
150
  server.tool(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@facelessad/mcp",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "FacelessAd as MCP tools — let your AI assistant create faceless video ads (Claude Desktop, Claude Code, Cursor, Windsurf, OpenClaw).",
5
5
  "license": "MIT",
6
6
  "type": "module",