lotux-mcp 0.1.1 → 0.1.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/index.mjs +54 -2
  2. package/package.json +1 -1
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.1.1" });
55
+ const server = new McpServer({ name: "lotux", version: "0.1.3" });
56
56
 
57
57
  // ── Reads ─────────────────────────────────────────────────────────────────────
58
58
 
@@ -132,7 +132,7 @@ server.tool(
132
132
 
133
133
  server.tool(
134
134
  "set_concept_fields",
135
- "Update fields on an existing concept. Any omitted field is left unchanged; the id arrays, when given, replace the full set of links.",
135
+ "Update fields on an existing concept. Any omitted field is left unchanged; the id arrays, when given, replace the full set of links. Assign team roles by passing a person id from list_members into strategist_id / copy_checker_id / editor_id / media_buyer_id / final_check_id.",
136
136
  {
137
137
  concept_id: z.string(),
138
138
  funnel_stage: z.string().optional(),
@@ -149,6 +149,12 @@ server.tool(
149
149
  persona_ids: z.array(z.string()).optional(),
150
150
  angle_ids: z.array(z.string()).optional(),
151
151
  use_case_ids: z.array(z.string()).optional(),
152
+ // Team roles — pass a member id from list_members.
153
+ strategist_id: z.string().optional().describe("Member id from list_members"),
154
+ copy_checker_id: z.string().optional().describe("Member id from list_members"),
155
+ editor_id: z.string().optional().describe("Member id from list_members"),
156
+ media_buyer_id: z.string().optional().describe("Member id from list_members"),
157
+ final_check_id: z.string().optional().describe("Member id from list_members"),
152
158
  },
153
159
  async ({ concept_id, ...patch }) =>
154
160
  ok(await rpc("set_concept_fields", { concept_id, patch }))
@@ -233,6 +239,52 @@ server.tool(
233
239
  async (args) => ok(await rpc("link_copy", args))
234
240
  );
235
241
 
242
+ // ── Kennisbank (knowledge base) ─────────────────────────────────────────────────
243
+
244
+ server.tool(
245
+ "list_kb_workspaces",
246
+ "List the Kennisbank (knowledge base) workspaces you can access — markdown docs the team and AI share. Returns id, name, visibility. Use a workspace id with list_kb_docs / create_kb_doc.",
247
+ {},
248
+ async () => ok(await rpc("list_kb_workspaces"))
249
+ );
250
+
251
+ server.tool(
252
+ "list_kb_docs",
253
+ "List the pages in a Kennisbank workspace (id, title, folder path). Use a doc id with get_kb_doc.",
254
+ { workspace_id: z.string().describe("Workspace id from list_kb_workspaces") },
255
+ async ({ workspace_id }) => ok(await rpc("list_kb_docs", { workspace_id }))
256
+ );
257
+
258
+ server.tool(
259
+ "get_kb_doc",
260
+ "Read one Kennisbank page's full markdown content by id.",
261
+ { doc_id: z.string() },
262
+ async ({ doc_id }) => ok(await rpc("get_kb_doc", { doc_id }))
263
+ );
264
+
265
+ server.tool(
266
+ "create_kb_doc",
267
+ "Create a new markdown page in a Kennisbank workspace. Returns the new doc id. content is markdown; folder_id is optional (root if omitted).",
268
+ {
269
+ workspace_id: z.string().describe("Workspace id from list_kb_workspaces"),
270
+ title: z.string(),
271
+ content: z.string().optional().describe("Markdown body"),
272
+ folder_id: z.string().optional(),
273
+ },
274
+ async (args) => ok(await rpc("create_kb_doc", args))
275
+ );
276
+
277
+ server.tool(
278
+ "update_kb_doc",
279
+ "Update a Kennisbank page's title and/or markdown content. Omitted fields are left unchanged.",
280
+ {
281
+ doc_id: z.string(),
282
+ title: z.string().optional(),
283
+ content: z.string().optional().describe("Markdown body (replaces the page content)"),
284
+ },
285
+ async (args) => ok(await rpc("update_kb_doc", args))
286
+ );
287
+
236
288
  async function main() {
237
289
  const transport = new StdioServerTransport();
238
290
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lotux-mcp",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
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": {