lotux-mcp 0.5.0 → 0.5.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 +2 -2
  2. package/index.mjs +21 -4
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # lotux-mcp
2
2
 
3
3
  Local MCP server that lets Claude (Desktop or Code) create and edit **LOTUX**
4
- concepts: fetch a brand's products / personas / angles / use-cases, create
4
+ concepts: fetch a brand's products / personas / angles / use-cases / offers, create
5
5
  concepts, fill scripts, draft + link ad copy, and assign team members.
6
6
 
7
7
  It is a thin connector — all logic and data live in the LOTUX app. This package
@@ -51,7 +51,7 @@ Restart Claude, then try: *"list my LOTUX brands"*.
51
51
  | Tool | What it does |
52
52
  |------|--------------|
53
53
  | `list_brands` | Brands (+ agency) you can access |
54
- | `list_entities` / `create_entity` / `update_entity` / `delete_entity` | A brand's products / personas / angles / use-cases |
54
+ | `list_entities` / `create_entity` / `update_entity` / `delete_entity` | A brand's products / personas / angles / use-cases / offers |
55
55
  | `list_concepts` / `get_concept` | Find a concept; read its full state (fields, links, **scripts** = markdown per language + shotlist, copy) |
56
56
  | `list_options` / `list_members` | Valid field values; assignable team members |
57
57
  | `create_concept` | New concept in Idea (+ optional links). Returns `{ id, script_id }` — write the script with `save_script` |
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.5.0" });
55
+ const server = new McpServer({ name: "lotux", version: "0.5.1" });
56
56
 
57
57
  // ── Reads ─────────────────────────────────────────────────────────────────────
58
58
 
@@ -65,7 +65,7 @@ server.tool(
65
65
 
66
66
  server.tool(
67
67
  "list_entities",
68
- "List a brand's products, personas, angles, and use-cases (the building blocks for a concept). Pass account_id from list_brands.",
68
+ "List a brand's products, personas, angles, use-cases and offers (the building blocks for a concept). Pass account_id from list_brands.",
69
69
  { account_id: z.string().describe("Brand (or agency) id from list_brands") },
70
70
  async ({ account_id }) => ok(await rpc("list_entities", { account_id }))
71
71
  );
@@ -257,6 +257,23 @@ server.tool(
257
257
  async (args) => ok(await rpc("set_base_language", args))
258
258
  );
259
259
 
260
+ server.tool(
261
+ "create_copy",
262
+ "Create a brand-scoped ad copy item (adcopy / headline / description) and link it to a concept. Returns the new copy id. To add another language to an existing copy use add_copy_translation instead.",
263
+ {
264
+ account_id: z.string().describe("Brand id from list_brands"),
265
+ concept_id: z.string(),
266
+ type: z.enum(["adcopy", "headline", "description"]),
267
+ text: z.string(),
268
+ product_ids: z.array(z.string()).optional(),
269
+ promotion: z.string().optional(),
270
+ country: z.string().optional(),
271
+ language: z.string().optional().describe("Full-written name, e.g. English"),
272
+ funnel_stage: z.string().optional(),
273
+ },
274
+ async (args) => ok(await rpc("create_copy", args))
275
+ );
276
+
260
277
  server.tool(
261
278
  "link_copy",
262
279
  "Link an existing copy item to a concept.",
@@ -283,11 +300,11 @@ server.tool(
283
300
  async (args) => ok(await rpc("add_copy_translation", args))
284
301
  );
285
302
 
286
- // ── Brand-DB entities (products / personas / angles / use-cases) ────────────────
303
+ // ── Brand-DB entities (products / personas / angles / use-cases / offers) ──────
287
304
 
288
305
  server.tool(
289
306
  "create_entity",
290
- "Create a NEW brand-DB entity — a product, persona, use_case or angle that doesn't exist yet (to attach an EXISTING one to a concept, pass its id to set_concept_fields instead). name is required; description optional. `extras` carries the typed fields: products take average_price / margin_pct / cm_target (target contribution-margin %) / ltv_multiplier / be_ncroas / product_link / type / status; personas take awareness_stage / hypothesis; angles take belief_shift (core idea goes in description). Omit unknown fields. Personas/use_cases/angles get an auto id_code (p1/u1/a1), returned in the result. Link the new entity to a concept afterwards with set_concept_fields.",
307
+ "Create a NEW brand-DB entity — a product, persona, use_case, angle or offer that doesn't exist yet (to attach an EXISTING one to a concept, pass its id to set_concept_fields instead). name is required; description optional. `extras` carries the typed fields: products take average_price / margin_pct / cm_target (target contribution-margin %) / ltv_multiplier / be_ncroas / product_link / type / status; personas take awareness_stage / hypothesis; angles take belief_shift (core idea goes in description); offers take offer_type / value / starts_on / ends_on / landing_page_id / hypothesis / conclusion / status. Omit unknown fields. Personas/use_cases/angles/offers get an auto id_code (p1/u1/a1/o1), returned in the result. Link the new entity to a concept afterwards with set_concept_fields.",
291
308
  {
292
309
  account_id: z.string().describe("Brand id from list_brands"),
293
310
  kind: z.enum(["products", "personas", "angles", "use_cases", "offers"]),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lotux-mcp",
3
- "version": "0.5.0",
3
+ "version": "0.5.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": {