@facelessad/mcp 1.0.0 → 1.0.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.
Files changed (3) hide show
  1. package/README.md +9 -0
  2. package/index.js +23 -1
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -41,3 +41,12 @@ same block under `openclaw mcp` config and verify with
41
41
 
42
42
  Videos build in the background (3–10 min); the assistant polls
43
43
  `facelessad_get_video`. You are only charged for steps that succeed.
44
+
45
+ ## 1.0.1
46
+
47
+ Seven tool-specific fields were reachable through the HTTP API but missing
48
+ from this package's schema, and the MCP SDK strips unknown keys — so an
49
+ assistant could not use them at all: `product_image_urls` (extra product
50
+ angles) and, for Video Banner, `texts`, `text_mode`, `background_image_url`,
51
+ `badge_image_url`, `badge` and `photo_query`. The schema now mirrors the
52
+ 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.0.1' });
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.',
@@ -112,9 +119,24 @@ const createShape = {
112
119
  sfx: z.boolean().optional(),
113
120
  captions: z.boolean().optional(),
114
121
  use_brand_kit: z.boolean().optional().describe('Default true'),
122
+ 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
123
  use_winners: z.boolean().optional().describe('Default true'),
116
124
  name: z.string().optional().describe('Display name in My Files'),
117
125
  product_image_url: z.string().optional().describe('REQUIRED for product-showcase: public https URL of the product photo'),
126
+ // 1.0.1 (§639): nämä API on hyväksynyt alusta asti, mutta ne puuttuivat
127
+ // tästä skeemasta — ja koska SDK riisuu tuntemattomat avaimet, avustin ei
128
+ // voinut käyttää niitä lainkaan. Peilaa McpController::toolList():ia 1:1.
129
+ 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.'),
130
+ texts: z.object({
131
+ headline: z.string().optional().describe('Max 80 characters'),
132
+ subline: z.string().optional().describe('Max 120 characters'),
133
+ cta_text: z.string().optional().describe('Max 30 characters'),
134
+ }).optional().describe('video-banner only: your own copy. Anything you leave out is written for you from the materials.'),
135
+ 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.'),
136
+ background_image_url: z.string().optional().describe('video-banner only: https URL to use instead of the automatic photo pick'),
137
+ badge_image_url: z.string().optional().describe('video-banner only: https URL of a badge image. Wins over badge.'),
138
+ 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.'),
139
+ photo_query: z.string().optional().describe('video-banner only: steer the automatic background photo search, e.g. "nordic office"'),
118
140
  };
119
141
 
120
142
  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.0.1",
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",