@omnicensus/mcp-server 0.3.2 → 0.3.3

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 (2) hide show
  1. package/dist/index.js +21 -0
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -156,6 +156,9 @@ const ChannelInsights = z.object({
156
156
  });
157
157
  const CompetitorTeardown = z.object({ competitor_job_id: z.string() });
158
158
  const ApplyEdits = z.object({ job_id: z.string() });
159
+ const GeneratePostCopy = z.object({ job_id: z.string(), platform: z.enum(['youtube', 'youtube_shorts', 'tiktok', 'instagram_reels', 'x']).optional() });
160
+ const NextVideoIdeas = z.object({});
161
+ const DubClip = z.object({ job_id: z.string(), clip_index: z.number().int().min(0), language: z.enum(['es', 'pt', 'hi', 'fr', 'de', 'it', 'ja', 'ko', 'ar']) });
159
162
  const ShareBrainMap = z.object({ job_id: z.string() });
160
163
  const FundOrgPool = z.object({ org_id: z.string(), credits: z.number().int().min(5).max(5000) });
161
164
  const SetAccountProfile = z.object({ account_type: z.enum(['individual', 'business']), company_name: z.string().optional(), company_size: z.string().optional(), website: z.string().optional(), vat_id: z.string().optional(), use_case: z.string().optional(), country: z.string().optional() });
@@ -211,6 +214,12 @@ const TOOLS = [
211
214
  desc: "Diff an analysed competitor video against YOUR channel averages (analyze_video the competitor's URL first, then pass its job_id). Returns {teardown:{headline,they_win[],you_win[],parity[],competitor_score,your_avg_score}} — what they do better, where you lead, and parity. Only compares dimensions both sides have. Free. Honest enough=false with no own history." },
212
215
  { name: "apply_edits", schema: ApplyEdits,
213
216
  desc: "Render a downloadable edited cut of an analysed job by removing its 'cut' edit_suggestions (dead zones / low-energy spans). Free. Returns {status, job_id}; poll get_job_status for edited_cut{url, original_duration, edited_duration, removed_seconds, cuts_applied[]}." },
217
+ { name: "generate_post_copy", schema: GeneratePostCopy,
218
+ desc: "Write the post AROUND an analysed video: 3 caption variants + hashtags + a platform-tuned description, grounded ONLY in the real transcript/summary (no invented stats). platform: youtube|youtube_shorts|tiktok|instagram_reels|x. 1 credit (refunded on failure). Returns {captions[3], hashtags, description, disclaimer}." },
219
+ { name: "next_video_ideas", schema: NextVideoIdeas,
220
+ desc: "Plan the NEXT video from the key owner's OWN library: best length, recurring weakness, top genre + 3 LLM concept angles grounded in their top transcripts (not market data). 1 credit, cached per ISO-week (cache hit = free). Honest enough=false under 3 analysed videos. Returns {ideas[3], best_length, recurring_weakness, top_genre}." },
221
+ { name: "dub_clip", schema: DubClip,
222
+ desc: "AI-dub one clip of a clip job into another language (es|pt|hi|fr|de|it|ja|ko|ar). Translates the transcript, synthesises a neural voice, ducks the original bed, burns target-language captions. 3 credits/min of clip (refunded on dispatch failure). Returns {status}; poll get_job_status for dubs[\"{clip_index}_{language}\"].url. Output is an AI-dubbed (synthetic) voice — disclose where required." },
214
223
  { name: "share_brain_map", schema: ShareBrainMap,
215
224
  desc: "Make a job's predicted brain-reaction map public on a token-gated /brain/{token} page (honest 'predicted, not a scan' label). Job must have a brain_simulation_url. Free. Returns {share_url, token}." },
216
225
  { name: "set_account_profile", schema: SetAccountProfile,
@@ -324,6 +333,18 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
324
333
  const p = ApplyEdits.parse(args);
325
334
  return toolResult(await call("/applyEditsHttp", { method: "POST", body: JSON.stringify(p) }));
326
335
  }
336
+ case "generate_post_copy": {
337
+ const p = GeneratePostCopy.parse(args);
338
+ return toolResult(await call("/generatePostCopyHttp", { method: "POST", body: JSON.stringify(p) }));
339
+ }
340
+ case "next_video_ideas": {
341
+ NextVideoIdeas.parse(args);
342
+ return toolResult(await call("/getNextVideoIdeasHttp", { method: "POST", body: "{}" }));
343
+ }
344
+ case "dub_clip": {
345
+ const p = DubClip.parse(args);
346
+ return toolResult(await call("/dubClipHttp", { method: "POST", body: JSON.stringify(p) }));
347
+ }
327
348
  case "share_brain_map": {
328
349
  const p = ShareBrainMap.parse(args);
329
350
  return toolResult(await call("/shareBrainMapHttp", { method: "POST", body: JSON.stringify(p) }));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@omnicensus/mcp-server",
3
- "version": "0.3.2",
4
- "description": "MCP server for Omnicensus let Claude, Cursor, Windsurf, and any MCP-compatible AI agent score, analyze, share, export, and bill on the Omnicensus video-engagement platform.",
3
+ "version": "0.3.3",
4
+ "description": "MCP server for Omnicensus \u2014 let Claude, Cursor, Windsurf, and any MCP-compatible AI agent score, analyze, share, export, and bill on the Omnicensus video-engagement platform.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://omnicensus.video",
7
7
  "bin": {