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.
- package/index.mjs +54 -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.
|
|
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.
|
|
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": {
|