lotux-mcp 0.10.0 → 0.10.2

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 +1 -1
  2. package/index.mjs +9 -9
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -64,7 +64,7 @@ Restart Claude, then try: *"list my LOTUX brands"*.
64
64
  | `iterate_concept` | Spawn a variation ({root}_Var{n}), the same as the app's Iterate button |
65
65
  | `list_kb_*` / `get_kb_doc` / `create_kb_doc` / `update_kb_doc` | Kennisbank pages |
66
66
  | `content_options` / `create_flywheel` / `update_flywheel` / `list_flywheels` / `get_flywheel` | Content flywheels (Marketing → Content, agency-only): one long-form video. Start with `content_options`; give flywheels a `key` so re-runs reuse them |
67
- | `push_assets` / `add_asset` / `get_asset` / `list_assets` / `update_asset` / `set_asset_status` / `add_comment` / `delete_asset` | Content assets, upserted on their `key`. Statuses: scripting → production → post_production → to_review → revisions → approved → live. Content you write lands in `to_review`; Claude can't set revisions, approve or mark live; deleting signed-off work needs `force`. Each asset carries `raw_footage_url` (raw files folder) and `final_asset_url` (the export — a change sends it to review), plus its content ID (`code`) and `name` = `"<code> - <title>"`; pass `code` instead of `asset_id` anywhere |
67
+ | `push_assets` / `add_asset` / `get_asset` / `list_assets` / `update_asset` / `set_asset_status` / `add_comment` / `delete_asset` | Content assets, upserted on their `key`. Statuses: scripting → production → ready_for_post → post_production → to_review → revisions → approved → live. Content you write lands in `to_review`; Claude can't set revisions, approve or mark live; deleting signed-off work needs `force`. Each asset carries `raw_footage_url` (raw files folder) and `final_asset_url` (the export — a change sends it to review), plus its content ID (`code`) and `name` = `"<code> - <title>"`; pass `code` instead of `asset_id` anywhere |
68
68
  | `get_setup_checks` / `set_setup_check` | A flywheel's setup checklist (Instagram auto-replies, setter replies, reel covers, YouTube, Klaviyo flow) — tick a step by `check_key` after doing it |
69
69
 
70
70
  Beats (`add_beat`, `update_beat`, `delete_beat`, `set_beat_translation`, `add_language`) were
package/index.mjs CHANGED
@@ -52,7 +52,7 @@ const ok = (result) => ({
52
52
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
53
53
  });
54
54
 
55
- const server = new McpServer({ name: "lotux", version: "0.10.0" });
55
+ const server = new McpServer({ name: "lotux", version: "0.10.2" });
56
56
 
57
57
  // ── Reads ─────────────────────────────────────────────────────────────────────
58
58
 
@@ -464,10 +464,10 @@ server.tool(
464
464
  // (defaults to your agency). Call content_options first for the allowed values.
465
465
 
466
466
  const PLATFORMS = ["youtube", "youtube_shorts", "instagram", "tiktok", "linkedin", "x", "email", "meta_ads", "opt_in_page", "google_doc", "internal"];
467
- // Statuses follow production. You may set the first four; revisions,
467
+ // Statuses follow production. You may set the first five; revisions,
468
468
  // approved and live are a human's call.
469
- const STATUSES = ["scripting", "production", "post_production", "to_review", "revisions", "approved", "live"];
470
- const CLAUDE_STATUSES = ["scripting", "production", "post_production", "to_review"];
469
+ const STATUSES = ["scripting", "production", "ready_for_post", "post_production", "to_review", "revisions", "approved", "live"];
470
+ const CLAUDE_STATUSES = ["scripting", "production", "ready_for_post", "post_production", "to_review"];
471
471
  // video = "To long form".
472
472
  const CTAS = ["none", "video", "lead_magnet", "dm_keyword", "booking", "follow"];
473
473
  // long_form carries the YouTube pieces: title = YouTube title, body =
@@ -551,8 +551,8 @@ server.tool(
551
551
  transcript: z.string().optional(),
552
552
  notes: z.string().optional(),
553
553
  new_key: z.string().optional().describe("Give the flywheel a (new) key"),
554
- klaviyo_flow_id: z.string().optional().describe("The Klaviyo flow built for this video (LM · <key>) — ticks the Klaviyo flow setup check"),
555
- klaviyo_campaign_id: z.string().optional().describe("The Klaviyo keep-warm campaign — ticks the keep-warm setup check"),
554
+ klaviyo_flow_id: z.string().optional().describe("The Klaviyo flow built for this video (LM · <key>, 4 emails for sign-ups); its setup check ticks once the flow is live"),
555
+ klaviyo_campaign_id: z.string().optional().describe("The Klaviyo announcement campaign (one \"new video\" email to the list); its setup check ticks once it is scheduled"),
556
556
  account_id: z.string().optional(),
557
557
  },
558
558
  async (args) => ok(await rpc("update_flywheel", args))
@@ -649,7 +649,7 @@ server.tool(
649
649
 
650
650
  server.tool(
651
651
  "set_asset_status",
652
- "Move an asset through scripting, production, post_production or to_review (to_review hands it to a human). Revisions, approved and live are a human's call in LOTUX.",
652
+ "Move an asset through scripting, production, ready_for_post, post_production or to_review (to_review hands it to a human). Revisions, approved and live are a human's call in LOTUX.",
653
653
  {
654
654
  ...assetRef,
655
655
  status: z.enum(CLAUDE_STATUSES),
@@ -675,14 +675,14 @@ server.tool(
675
675
 
676
676
  server.tool(
677
677
  "get_setup_checks",
678
- "A flywheel's setup checklist: the steps outside LOTUX (Instagram auto-reply per lead-magnet DM keyword, setter saved reply per booking keyword, reel covers, YouTube scheduling, the Klaviyo flow + keep-warm campaign). Each with check_key, status (open / done / n_a), due date, owner, and whether LOTUX ticks it itself (auto).",
678
+ "A flywheel's setup checklist: the steps outside LOTUX (Instagram auto-reply per lead-magnet DM keyword, reel covers, YouTube scheduling, the Klaviyo flow + keep-warm campaign). Each with check_key, status (open / done / n_a), due date, owner, and whether LOTUX ticks it itself (auto).",
679
679
  { ...flywheelRef, account_id: z.string().optional() },
680
680
  async (args) => ok(await rpc("get_setup_checks", args))
681
681
  );
682
682
 
683
683
  server.tool(
684
684
  "set_setup_check",
685
- "Tick a setup step after you did it (e.g. check_key \"dm-keyword:EXIT\" once the Instagram auto-reply is set up AND tested). status done / open / n_a, plus an optional note. Auto checks (klaviyo-*) tick themselves. Logged as done by Claude.",
685
+ "Tick a setup step after you did it (e.g. check_key \"dm-keyword:EXIT\" once the Instagram auto-reply is set up AND tested). status done / open / n_a, plus an optional note. Auto checks (klaviyo-*, lead-magnet-page) tick themselves. Logged as done by Claude.",
686
686
  {
687
687
  ...flywheelRef,
688
688
  check_key: z.string().describe('From get_setup_checks, e.g. "dm-keyword:EXIT", "reel-covers", "youtube"'),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lotux-mcp",
3
- "version": "0.10.0",
3
+ "version": "0.10.2",
4
4
  "type": "module",
5
5
  "description": "Local MCP server that lets Claude create LOTUX concepts (fetch brand-DB entities, create concepts, fill scripts + copy). Talks to the LOTUX app with a personal token; no business logic or secrets live here.",
6
6
  "bin": {