@intangle/mcp-server 1.0.7 → 1.0.8

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/dist/index.js +200 -68
  2. package/index.ts +208 -69
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -22,7 +22,7 @@ if (!MCP_API_KEY) {
22
22
  console.log("Intangle MCP Server starting - connecting to", API_BASE_URL);
23
23
  // Version checking
24
24
  // IMPORTANT: Update BOTH package.json version AND this constant when bumping version
25
- const CURRENT_VERSION = "1.0.7";
25
+ const CURRENT_VERSION = "1.0.8";
26
26
  let latestVersion = null;
27
27
  let versionCheckDone = false;
28
28
  async function checkVersion() {
@@ -75,29 +75,62 @@ const server = new Server({
75
75
  const TOOLS = [
76
76
  {
77
77
  name: "add_memory",
78
- description: "Store information in the user's memory graph with flexible topics. REQUIRES space_id parameter.",
78
+ description: "Store one or more memories in the user's memory graph with flexible topics. Accepts a single memory object or an array of memory objects for batch creation. REQUIRES space_id parameter.",
79
79
  inputSchema: {
80
80
  type: "object",
81
81
  properties: {
82
82
  space_id: {
83
83
  type: "string",
84
- description: "REQUIRED: Space to store memory in (use list_spaces to see available options)",
85
- },
86
- title: {
87
- type: "string",
88
- description: "Title/summary of the memory",
89
- },
90
- content: {
91
- type: "string",
92
- description: "Detailed content of the memory",
93
- },
94
- topics: {
95
- type: "array",
96
- items: { type: "string" },
97
- description: "Flexible topics/tags for organization (e.g., ['coding', 'react'])",
84
+ description: "REQUIRED: Space to store memory/memories in (use list_spaces to see available options)",
85
+ },
86
+ memories: {
87
+ oneOf: [
88
+ {
89
+ type: "object",
90
+ properties: {
91
+ title: {
92
+ type: "string",
93
+ description: "Title/summary of the memory",
94
+ },
95
+ content: {
96
+ type: "string",
97
+ description: "Detailed content of the memory",
98
+ },
99
+ topics: {
100
+ type: "array",
101
+ items: { type: "string" },
102
+ description: "Flexible topics/tags for organization (e.g., ['coding', 'react'])",
103
+ },
104
+ },
105
+ required: ["title", "content"],
106
+ },
107
+ {
108
+ type: "array",
109
+ items: {
110
+ type: "object",
111
+ properties: {
112
+ title: {
113
+ type: "string",
114
+ description: "Title/summary of the memory",
115
+ },
116
+ content: {
117
+ type: "string",
118
+ description: "Detailed content of the memory",
119
+ },
120
+ topics: {
121
+ type: "array",
122
+ items: { type: "string" },
123
+ description: "Flexible topics/tags for organization (e.g., ['coding', 'react'])",
124
+ },
125
+ },
126
+ required: ["title", "content"],
127
+ },
128
+ },
129
+ ],
130
+ description: "Single memory object or array of memory objects to create",
98
131
  },
99
132
  },
100
- required: ["space_id", "title", "content"],
133
+ required: ["space_id", "memories"],
101
134
  },
102
135
  },
103
136
  {
@@ -276,39 +309,82 @@ const TOOLS = [
276
309
  },
277
310
  {
278
311
  name: "add_task",
279
- description: "Create a task in your space with status tracking. Tasks have graph relationships like memories (entities, topics, temporal). REQUIRES space_id parameter.",
312
+ description: "Create one or more tasks in your space with status tracking. Accepts a single task object or an array of task objects for batch creation. Tasks have graph relationships like memories (entities, topics, temporal). REQUIRES space_id parameter.",
280
313
  inputSchema: {
281
314
  type: "object",
282
315
  properties: {
283
316
  space_id: {
284
317
  type: "string",
285
- description: "REQUIRED: Space to create task in (use list_spaces to see available options)",
286
- },
287
- title: {
288
- type: "string",
289
- description: "Task title/summary",
290
- },
291
- content: {
292
- type: "string",
293
- description: "Detailed task description",
294
- },
295
- topics: {
296
- type: "array",
297
- items: { type: "string" },
298
- description: "Optional topics/tags for organization",
299
- },
300
- status: {
301
- type: "string",
302
- enum: ["pending", "in_progress", "completed", "invalidated"],
303
- description: "Task status (default: pending)",
304
- default: "pending",
305
- },
306
- parent_id: {
307
- type: "string",
308
- description: "Optional parent task ID to create this as a subtask",
318
+ description: "REQUIRED: Space to create task/tasks in (use list_spaces to see available options)",
319
+ },
320
+ tasks: {
321
+ oneOf: [
322
+ {
323
+ type: "object",
324
+ properties: {
325
+ title: {
326
+ type: "string",
327
+ description: "Task title/summary",
328
+ },
329
+ content: {
330
+ type: "string",
331
+ description: "Detailed task description",
332
+ },
333
+ topics: {
334
+ type: "array",
335
+ items: { type: "string" },
336
+ description: "Optional topics/tags for organization",
337
+ },
338
+ status: {
339
+ type: "string",
340
+ enum: ["pending", "in_progress", "completed", "invalidated"],
341
+ description: "Task status (default: pending)",
342
+ default: "pending",
343
+ },
344
+ parent_id: {
345
+ type: "string",
346
+ description: "Optional parent task ID to create this as a subtask",
347
+ },
348
+ },
349
+ required: ["title", "content"],
350
+ },
351
+ {
352
+ type: "array",
353
+ items: {
354
+ type: "object",
355
+ properties: {
356
+ title: {
357
+ type: "string",
358
+ description: "Task title/summary",
359
+ },
360
+ content: {
361
+ type: "string",
362
+ description: "Detailed task description",
363
+ },
364
+ topics: {
365
+ type: "array",
366
+ items: { type: "string" },
367
+ description: "Optional topics/tags for organization",
368
+ },
369
+ status: {
370
+ type: "string",
371
+ enum: ["pending", "in_progress", "completed", "invalidated"],
372
+ description: "Task status (default: pending)",
373
+ default: "pending",
374
+ },
375
+ parent_id: {
376
+ type: "string",
377
+ description: "Optional parent task ID to create this as a subtask",
378
+ },
379
+ },
380
+ required: ["title", "content"],
381
+ },
382
+ },
383
+ ],
384
+ description: "Single task object or array of task objects to create",
309
385
  },
310
386
  },
311
- required: ["space_id", "title", "content"],
387
+ required: ["space_id", "tasks"],
312
388
  },
313
389
  },
314
390
  {
@@ -332,29 +408,66 @@ const TOOLS = [
332
408
  },
333
409
  {
334
410
  name: "update_task",
335
- description: "Update task title, content, or topics",
411
+ description: "Update one or more tasks. Accepts a single update object or an array of update objects for batch updates. Each update must include task_id.",
336
412
  inputSchema: {
337
413
  type: "object",
338
414
  properties: {
339
- task_id: {
340
- type: "string",
341
- description: "Task ID to update",
342
- },
343
- title: {
344
- type: "string",
345
- description: "New title (optional)",
346
- },
347
- content: {
348
- type: "string",
349
- description: "New content (optional)",
350
- },
351
- topics: {
352
- type: "array",
353
- items: { type: "string" },
354
- description: "New topics array (optional)",
415
+ updates: {
416
+ oneOf: [
417
+ {
418
+ type: "object",
419
+ properties: {
420
+ task_id: {
421
+ type: "string",
422
+ description: "Task ID to update",
423
+ },
424
+ title: {
425
+ type: "string",
426
+ description: "New title (optional)",
427
+ },
428
+ content: {
429
+ type: "string",
430
+ description: "New content (optional)",
431
+ },
432
+ topics: {
433
+ type: "array",
434
+ items: { type: "string" },
435
+ description: "New topics array (optional)",
436
+ },
437
+ },
438
+ required: ["task_id"],
439
+ },
440
+ {
441
+ type: "array",
442
+ items: {
443
+ type: "object",
444
+ properties: {
445
+ task_id: {
446
+ type: "string",
447
+ description: "Task ID to update",
448
+ },
449
+ title: {
450
+ type: "string",
451
+ description: "New title (optional)",
452
+ },
453
+ content: {
454
+ type: "string",
455
+ description: "New content (optional)",
456
+ },
457
+ topics: {
458
+ type: "array",
459
+ items: { type: "string" },
460
+ description: "New topics array (optional)",
461
+ },
462
+ },
463
+ required: ["task_id"],
464
+ },
465
+ },
466
+ ],
467
+ description: "Single update object or array of update objects",
355
468
  },
356
469
  },
357
- required: ["task_id"],
470
+ required: ["updates"],
358
471
  },
359
472
  },
360
473
  {
@@ -424,11 +537,14 @@ async function handleAddMemory(args) {
424
537
  if (!args.space_id) {
425
538
  throw new Error("space_id is required. Use list_spaces to see available options.");
426
539
  }
427
- const memoryData = {
428
- topics: [],
429
- ...args,
430
- };
431
- return makeApiCall("add-memory", memoryData);
540
+ if (!args.memories) {
541
+ throw new Error("memories parameter is required (single object or array)");
542
+ }
543
+ // Pass through to API
544
+ return makeApiCall("add-memory", {
545
+ space_id: args.space_id,
546
+ memories: args.memories,
547
+ });
432
548
  }
433
549
  async function handleSearchMemories(args) {
434
550
  const { space_id, space_ids, query, topics, max_results = 10, } = args;
@@ -482,13 +598,29 @@ async function handleStart(args) {
482
598
  return makeApiCall("start", { space_id });
483
599
  }
484
600
  async function handleAddTask(args) {
485
- return makeApiCall("add-task", args);
601
+ if (!args.space_id) {
602
+ throw new Error("space_id is required. Use list_spaces to see available options.");
603
+ }
604
+ if (!args.tasks) {
605
+ throw new Error("tasks parameter is required (single object or array)");
606
+ }
607
+ // Pass through to API
608
+ return makeApiCall("add-task", {
609
+ space_id: args.space_id,
610
+ tasks: args.tasks,
611
+ });
486
612
  }
487
613
  async function handleUpdateTaskStatus(args) {
488
614
  return makeApiCall("update-task-status", args);
489
615
  }
490
616
  async function handleUpdateTask(args) {
491
- return makeApiCall("update-task", args);
617
+ if (!args.updates) {
618
+ throw new Error("updates parameter is required (single object or array)");
619
+ }
620
+ // Pass through to API
621
+ return makeApiCall("update-task", {
622
+ updates: args.updates,
623
+ });
492
624
  }
493
625
  async function handleListTasks(args) {
494
626
  return makeApiCall("list-tasks", args);
package/index.ts CHANGED
@@ -35,7 +35,7 @@ console.log("Intangle MCP Server starting - connecting to", API_BASE_URL);
35
35
 
36
36
  // Version checking
37
37
  // IMPORTANT: Update BOTH package.json version AND this constant when bumping version
38
- const CURRENT_VERSION = "1.0.7";
38
+ const CURRENT_VERSION = "1.0.8";
39
39
  let latestVersion: string | null = null;
40
40
  let versionCheckDone = false;
41
41
 
@@ -100,31 +100,65 @@ const TOOLS = [
100
100
  {
101
101
  name: "add_memory",
102
102
  description:
103
- "Store information in the user's memory graph with flexible topics. REQUIRES space_id parameter.",
103
+ "Store one or more memories in the user's memory graph with flexible topics. Accepts a single memory object or an array of memory objects for batch creation. REQUIRES space_id parameter.",
104
104
  inputSchema: {
105
105
  type: "object",
106
106
  properties: {
107
107
  space_id: {
108
108
  type: "string",
109
109
  description:
110
- "REQUIRED: Space to store memory in (use list_spaces to see available options)",
111
- },
112
- title: {
113
- type: "string",
114
- description: "Title/summary of the memory",
115
- },
116
- content: {
117
- type: "string",
118
- description: "Detailed content of the memory",
119
- },
120
- topics: {
121
- type: "array",
122
- items: { type: "string" },
123
- description:
124
- "Flexible topics/tags for organization (e.g., ['coding', 'react'])",
110
+ "REQUIRED: Space to store memory/memories in (use list_spaces to see available options)",
111
+ },
112
+ memories: {
113
+ oneOf: [
114
+ {
115
+ type: "object",
116
+ properties: {
117
+ title: {
118
+ type: "string",
119
+ description: "Title/summary of the memory",
120
+ },
121
+ content: {
122
+ type: "string",
123
+ description: "Detailed content of the memory",
124
+ },
125
+ topics: {
126
+ type: "array",
127
+ items: { type: "string" },
128
+ description:
129
+ "Flexible topics/tags for organization (e.g., ['coding', 'react'])",
130
+ },
131
+ },
132
+ required: ["title", "content"],
133
+ },
134
+ {
135
+ type: "array",
136
+ items: {
137
+ type: "object",
138
+ properties: {
139
+ title: {
140
+ type: "string",
141
+ description: "Title/summary of the memory",
142
+ },
143
+ content: {
144
+ type: "string",
145
+ description: "Detailed content of the memory",
146
+ },
147
+ topics: {
148
+ type: "array",
149
+ items: { type: "string" },
150
+ description:
151
+ "Flexible topics/tags for organization (e.g., ['coding', 'react'])",
152
+ },
153
+ },
154
+ required: ["title", "content"],
155
+ },
156
+ },
157
+ ],
158
+ description: "Single memory object or array of memory objects to create",
125
159
  },
126
160
  },
127
- required: ["space_id", "title", "content"],
161
+ required: ["space_id", "memories"],
128
162
  },
129
163
  },
130
164
  {
@@ -315,40 +349,83 @@ const TOOLS = [
315
349
  {
316
350
  name: "add_task",
317
351
  description:
318
- "Create a task in your space with status tracking. Tasks have graph relationships like memories (entities, topics, temporal). REQUIRES space_id parameter.",
352
+ "Create one or more tasks in your space with status tracking. Accepts a single task object or an array of task objects for batch creation. Tasks have graph relationships like memories (entities, topics, temporal). REQUIRES space_id parameter.",
319
353
  inputSchema: {
320
354
  type: "object",
321
355
  properties: {
322
356
  space_id: {
323
357
  type: "string",
324
358
  description:
325
- "REQUIRED: Space to create task in (use list_spaces to see available options)",
326
- },
327
- title: {
328
- type: "string",
329
- description: "Task title/summary",
330
- },
331
- content: {
332
- type: "string",
333
- description: "Detailed task description",
334
- },
335
- topics: {
336
- type: "array",
337
- items: { type: "string" },
338
- description: "Optional topics/tags for organization",
339
- },
340
- status: {
341
- type: "string",
342
- enum: ["pending", "in_progress", "completed", "invalidated"],
343
- description: "Task status (default: pending)",
344
- default: "pending",
345
- },
346
- parent_id: {
347
- type: "string",
348
- description: "Optional parent task ID to create this as a subtask",
359
+ "REQUIRED: Space to create task/tasks in (use list_spaces to see available options)",
360
+ },
361
+ tasks: {
362
+ oneOf: [
363
+ {
364
+ type: "object",
365
+ properties: {
366
+ title: {
367
+ type: "string",
368
+ description: "Task title/summary",
369
+ },
370
+ content: {
371
+ type: "string",
372
+ description: "Detailed task description",
373
+ },
374
+ topics: {
375
+ type: "array",
376
+ items: { type: "string" },
377
+ description: "Optional topics/tags for organization",
378
+ },
379
+ status: {
380
+ type: "string",
381
+ enum: ["pending", "in_progress", "completed", "invalidated"],
382
+ description: "Task status (default: pending)",
383
+ default: "pending",
384
+ },
385
+ parent_id: {
386
+ type: "string",
387
+ description: "Optional parent task ID to create this as a subtask",
388
+ },
389
+ },
390
+ required: ["title", "content"],
391
+ },
392
+ {
393
+ type: "array",
394
+ items: {
395
+ type: "object",
396
+ properties: {
397
+ title: {
398
+ type: "string",
399
+ description: "Task title/summary",
400
+ },
401
+ content: {
402
+ type: "string",
403
+ description: "Detailed task description",
404
+ },
405
+ topics: {
406
+ type: "array",
407
+ items: { type: "string" },
408
+ description: "Optional topics/tags for organization",
409
+ },
410
+ status: {
411
+ type: "string",
412
+ enum: ["pending", "in_progress", "completed", "invalidated"],
413
+ description: "Task status (default: pending)",
414
+ default: "pending",
415
+ },
416
+ parent_id: {
417
+ type: "string",
418
+ description: "Optional parent task ID to create this as a subtask",
419
+ },
420
+ },
421
+ required: ["title", "content"],
422
+ },
423
+ },
424
+ ],
425
+ description: "Single task object or array of task objects to create",
349
426
  },
350
427
  },
351
- required: ["space_id", "title", "content"],
428
+ required: ["space_id", "tasks"],
352
429
  },
353
430
  },
354
431
  {
@@ -372,29 +449,66 @@ const TOOLS = [
372
449
  },
373
450
  {
374
451
  name: "update_task",
375
- description: "Update task title, content, or topics",
452
+ description: "Update one or more tasks. Accepts a single update object or an array of update objects for batch updates. Each update must include task_id.",
376
453
  inputSchema: {
377
454
  type: "object",
378
455
  properties: {
379
- task_id: {
380
- type: "string",
381
- description: "Task ID to update",
382
- },
383
- title: {
384
- type: "string",
385
- description: "New title (optional)",
386
- },
387
- content: {
388
- type: "string",
389
- description: "New content (optional)",
390
- },
391
- topics: {
392
- type: "array",
393
- items: { type: "string" },
394
- description: "New topics array (optional)",
456
+ updates: {
457
+ oneOf: [
458
+ {
459
+ type: "object",
460
+ properties: {
461
+ task_id: {
462
+ type: "string",
463
+ description: "Task ID to update",
464
+ },
465
+ title: {
466
+ type: "string",
467
+ description: "New title (optional)",
468
+ },
469
+ content: {
470
+ type: "string",
471
+ description: "New content (optional)",
472
+ },
473
+ topics: {
474
+ type: "array",
475
+ items: { type: "string" },
476
+ description: "New topics array (optional)",
477
+ },
478
+ },
479
+ required: ["task_id"],
480
+ },
481
+ {
482
+ type: "array",
483
+ items: {
484
+ type: "object",
485
+ properties: {
486
+ task_id: {
487
+ type: "string",
488
+ description: "Task ID to update",
489
+ },
490
+ title: {
491
+ type: "string",
492
+ description: "New title (optional)",
493
+ },
494
+ content: {
495
+ type: "string",
496
+ description: "New content (optional)",
497
+ },
498
+ topics: {
499
+ type: "array",
500
+ items: { type: "string" },
501
+ description: "New topics array (optional)",
502
+ },
503
+ },
504
+ required: ["task_id"],
505
+ },
506
+ },
507
+ ],
508
+ description: "Single update object or array of update objects",
395
509
  },
396
510
  },
397
- required: ["task_id"],
511
+ required: ["updates"],
398
512
  },
399
513
  },
400
514
  {
@@ -470,11 +584,15 @@ async function handleAddMemory(args: any) {
470
584
  );
471
585
  }
472
586
 
473
- const memoryData = {
474
- topics: [],
475
- ...args,
476
- };
477
- return makeApiCall("add-memory", memoryData);
587
+ if (!args.memories) {
588
+ throw new Error("memories parameter is required (single object or array)");
589
+ }
590
+
591
+ // Pass through to API
592
+ return makeApiCall("add-memory", {
593
+ space_id: args.space_id,
594
+ memories: args.memories,
595
+ });
478
596
  }
479
597
 
480
598
  async function handleSearchMemories(args: any) {
@@ -570,7 +688,21 @@ async function handleStart(args: any) {
570
688
  }
571
689
 
572
690
  async function handleAddTask(args: any) {
573
- return makeApiCall("add-task", args);
691
+ if (!args.space_id) {
692
+ throw new Error(
693
+ "space_id is required. Use list_spaces to see available options.",
694
+ );
695
+ }
696
+
697
+ if (!args.tasks) {
698
+ throw new Error("tasks parameter is required (single object or array)");
699
+ }
700
+
701
+ // Pass through to API
702
+ return makeApiCall("add-task", {
703
+ space_id: args.space_id,
704
+ tasks: args.tasks,
705
+ });
574
706
  }
575
707
 
576
708
  async function handleUpdateTaskStatus(args: any) {
@@ -578,7 +710,14 @@ async function handleUpdateTaskStatus(args: any) {
578
710
  }
579
711
 
580
712
  async function handleUpdateTask(args: any) {
581
- return makeApiCall("update-task", args);
713
+ if (!args.updates) {
714
+ throw new Error("updates parameter is required (single object or array)");
715
+ }
716
+
717
+ // Pass through to API
718
+ return makeApiCall("update-task", {
719
+ updates: args.updates,
720
+ });
582
721
  }
583
722
 
584
723
  async function handleListTasks(args: any) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intangle/mcp-server",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "Model Context Protocol server for Intangle - AI memory that persists across conversations",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",