@intangle/mcp-server 1.1.5 → 1.1.7

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 +497 -464
  2. package/index.ts +491 -485
  3. package/package.json +51 -50
package/dist/index.js CHANGED
@@ -78,66 +78,72 @@ const server = new Server({
78
78
  },
79
79
  });
80
80
  const TOOLS = [
81
- {
82
- name: "add_memory",
83
- description: "Store CONTEXT (general information and knowledge) in the user's memory system. For actionable workflow items with status tracking, use add_task instead. Accepts a single context item or an array of context items for batch creation. REQUIRES space_id parameter.",
84
- inputSchema: {
85
- type: "object",
86
- properties: {
87
- space_id: {
88
- type: "string",
89
- description: "REQUIRED: Space to store memory/memories in (use list_spaces to see available options)",
90
- },
91
- memories: {
92
- oneOf: [
93
- {
94
- type: "object",
95
- properties: {
96
- title: {
97
- type: "string",
98
- description: "Title/summary of the memory",
99
- },
100
- content: {
101
- type: "string",
102
- description: "Detailed content of the memory",
103
- },
104
- topics: {
105
- type: "array",
106
- items: { type: "string" },
107
- description: "Flexible topics/tags for organization (e.g., ['coding', 'react'])",
108
- },
109
- },
110
- required: ["title", "content"],
111
- },
112
- {
113
- type: "array",
114
- items: {
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: "Flexible topics/tags for organization (e.g., ['coding', 'react'])",
129
- },
130
- },
131
- required: ["title", "content"],
132
- },
133
- },
134
- ],
135
- description: "Single memory object or array of memory objects to create",
136
- },
137
- },
138
- required: ["space_id", "memories"],
139
- },
140
- },
81
+ // DEPRECATED: Use update_memory instead (Nov 8, 2025)
82
+ // {
83
+ // name: "add_memory",
84
+ // description:
85
+ // "Store CONTEXT (general information and knowledge) in the user's memory system. For actionable workflow items with status tracking, use add_task instead. Accepts a single context item or an array of context items for batch creation. REQUIRES space_id parameter.",
86
+ // inputSchema: {
87
+ // type: "object",
88
+ // properties: {
89
+ // space_id: {
90
+ // type: "string",
91
+ // description:
92
+ // "REQUIRED: Space to store memory/memories in (use list_spaces to see available options)",
93
+ // },
94
+ // memories: {
95
+ // oneOf: [
96
+ // {
97
+ // type: "object",
98
+ // properties: {
99
+ // title: {
100
+ // type: "string",
101
+ // description: "Title/summary of the memory",
102
+ // },
103
+ // content: {
104
+ // type: "string",
105
+ // description: "Detailed content of the memory",
106
+ // },
107
+ // topics: {
108
+ // type: "array",
109
+ // items: { type: "string" },
110
+ // description:
111
+ // "Flexible topics/tags for organization (e.g., ['coding', 'react'])",
112
+ // },
113
+ // },
114
+ // required: ["title", "content"],
115
+ // },
116
+ // {
117
+ // type: "array",
118
+ // items: {
119
+ // type: "object",
120
+ // properties: {
121
+ // title: {
122
+ // type: "string",
123
+ // description: "Title/summary of the memory",
124
+ // },
125
+ // content: {
126
+ // type: "string",
127
+ // description: "Detailed content of the memory",
128
+ // },
129
+ // topics: {
130
+ // type: "array",
131
+ // items: { type: "string" },
132
+ // description:
133
+ // "Flexible topics/tags for organization (e.g., ['coding', 'react'])",
134
+ // },
135
+ // },
136
+ // required: ["title", "content"],
137
+ // },
138
+ // },
139
+ // ],
140
+ // description:
141
+ // "Single memory object or array of memory objects to create",
142
+ // },
143
+ // },
144
+ // required: ["space_id", "memories"],
145
+ // },
146
+ // },
141
147
  {
142
148
  name: "search_memories",
143
149
  description: "Search through ALL stored data including BOTH context (general information) AND tasks (actionable workflow items). Uses advanced hybrid search (semantic + text + entity relationships). When a user asks to 'update memory' or 'check memory', this tool searches BOTH types. ALWAYS provide space_id parameter - this is mandatory for all searches.",
@@ -224,30 +230,32 @@ const TOOLS = [
224
230
  // },
225
231
  // },
226
232
  // },
227
- {
228
- name: "delete_memory",
229
- description: "Delete one or more CONTEXT items (general information). For deleting tasks, use delete_task instead. Accepts a single memory ID or an array of memory IDs for batch deletion.",
230
- inputSchema: {
231
- type: "object",
232
- properties: {
233
- memory_ids: {
234
- oneOf: [
235
- {
236
- type: "string",
237
- description: "Single memory ID to delete",
238
- },
239
- {
240
- type: "array",
241
- items: { type: "string" },
242
- description: "Array of memory IDs to delete",
243
- },
244
- ],
245
- description: "Single memory ID or array of memory IDs to delete",
246
- },
247
- },
248
- required: ["memory_ids"],
249
- },
250
- },
233
+ // DEPRECATED: Use update_memory instead (Nov 8, 2025)
234
+ // {
235
+ // name: "delete_memory",
236
+ // description:
237
+ // "Delete one or more CONTEXT items (general information). For deleting tasks, use delete_task instead. Accepts a single memory ID or an array of memory IDs for batch deletion.",
238
+ // inputSchema: {
239
+ // type: "object",
240
+ // properties: {
241
+ // memory_ids: {
242
+ // oneOf: [
243
+ // {
244
+ // type: "string",
245
+ // description: "Single memory ID to delete",
246
+ // },
247
+ // {
248
+ // type: "array",
249
+ // items: { type: "string" },
250
+ // description: "Array of memory IDs to delete",
251
+ // },
252
+ // ],
253
+ // description: "Single memory ID or array of memory IDs to delete",
254
+ // },
255
+ // },
256
+ // required: ["memory_ids"],
257
+ // },
258
+ // },
251
259
  {
252
260
  name: "list_spaces",
253
261
  description: "Get all available spaces with their descriptions and item counts (both context and tasks). Spaces are top-level containers that isolate different contexts (e.g., personal, work, projects).",
@@ -315,110 +323,238 @@ const TOOLS = [
315
323
  required: ["space_id"],
316
324
  },
317
325
  },
326
+ // DEPRECATED: Use update_memory instead (Nov 8, 2025)
327
+ // {
328
+ // name: "add_task",
329
+ // description:
330
+ // "Create one or more tasks in your space with status tracking and priority levels. Supports BATCH creation and NESTED subtasks. Accepts a single task object or an array of task objects. Tasks have graph relationships like memories (entities, topics, temporal). REQUIRES space_id parameter. Example with subtasks: {tasks: {title: 'Parent', content: 'Main task', subtasks: [{title: 'Subtask 1', content: 'Child task'}]}}",
331
+ // inputSchema: {
332
+ // type: "object",
333
+ // properties: {
334
+ // space_id: {
335
+ // type: "string",
336
+ // description:
337
+ // "REQUIRED: Space to create task/tasks in (use list_spaces to see available options)",
338
+ // },
339
+ // tasks: {
340
+ // oneOf: [
341
+ // {
342
+ // type: "object",
343
+ // properties: {
344
+ // title: {
345
+ // type: "string",
346
+ // description: "Task title/summary",
347
+ // },
348
+ // content: {
349
+ // type: "string",
350
+ // description: "Detailed task description",
351
+ // },
352
+ // topics: {
353
+ // type: "array",
354
+ // items: { type: "string" },
355
+ // description: "Optional topics/tags for organization",
356
+ // },
357
+ // status: {
358
+ // type: "string",
359
+ // enum: ["pending", "in_progress", "completed", "invalidated"],
360
+ // description: "Task status (default: pending)",
361
+ // default: "pending",
362
+ // },
363
+ // priority: {
364
+ // type: "string",
365
+ // enum: ["urgent", "high", "medium", "low"],
366
+ // description:
367
+ // "Task priority level (default: medium). Use 'urgent' for time-sensitive tasks requiring immediate attention, 'high' for important tasks, 'medium' for standard tasks, 'low' for nice-to-have tasks.",
368
+ // default: "medium",
369
+ // },
370
+ // parent_id: {
371
+ // type: "string",
372
+ // description:
373
+ // "Optional parent task ID to create this as a subtask. Use an existing task's ID (format: task_TIMESTAMP_ID) to nest this task under it. Use list_tasks to find parent task IDs. If omitted, creates a top-level task. NOTE: Use 'subtasks' array instead for creating parent+children in one call.",
374
+ // },
375
+ // subtasks: {
376
+ // type: "array",
377
+ // items: {
378
+ // type: "object",
379
+ // properties: {
380
+ // title: {
381
+ // type: "string",
382
+ // description: "Subtask title",
383
+ // },
384
+ // content: {
385
+ // type: "string",
386
+ // description: "Subtask description/details",
387
+ // },
388
+ // topics: {
389
+ // type: "array",
390
+ // items: { type: "string" },
391
+ // description: "Topics/tags for this subtask",
392
+ // },
393
+ // status: {
394
+ // type: "string",
395
+ // enum: [
396
+ // "pending",
397
+ // "in_progress",
398
+ // "completed",
399
+ // "invalidated",
400
+ // ],
401
+ // description: "Subtask status (default: pending)",
402
+ // default: "pending",
403
+ // },
404
+ // priority: {
405
+ // type: "string",
406
+ // enum: ["urgent", "high", "medium", "low"],
407
+ // description: "Subtask priority level (default: medium)",
408
+ // default: "medium",
409
+ // },
410
+ // },
411
+ // required: ["title", "content"],
412
+ // },
413
+ // description:
414
+ // "Optional array of subtasks to create under this parent task. Each will be automatically linked to the parent.",
415
+ // },
416
+ // },
417
+ // required: ["title", "content"],
418
+ // },
419
+ // {
420
+ // type: "array",
421
+ // items: {
422
+ // type: "object",
423
+ // properties: {
424
+ // title: {
425
+ // type: "string",
426
+ // description: "Task title/summary",
427
+ // },
428
+ // content: {
429
+ // type: "string",
430
+ // description: "Detailed task description",
431
+ // },
432
+ // topics: {
433
+ // type: "array",
434
+ // items: { type: "string" },
435
+ // description: "Optional topics/tags for organization",
436
+ // },
437
+ // status: {
438
+ // type: "string",
439
+ // enum: [
440
+ // "pending",
441
+ // "in_progress",
442
+ // "completed",
443
+ // "invalidated",
444
+ // ],
445
+ // description: "Task status (default: pending)",
446
+ // default: "pending",
447
+ // },
448
+ // priority: {
449
+ // type: "string",
450
+ // enum: ["urgent", "high", "medium", "low"],
451
+ // description:
452
+ // "Task priority level (default: medium). Use 'urgent' for time-sensitive tasks requiring immediate attention, 'high' for important tasks, 'medium' for standard tasks, 'low' for nice-to-have tasks.",
453
+ // default: "medium",
454
+ // },
455
+ // parent_id: {
456
+ // type: "string",
457
+ // description:
458
+ // "Optional parent task ID to create this as a subtask. Use an existing task's ID (format: task_TIMESTAMP_ID) to nest this task under it. Use list_tasks to find parent task IDs. If omitted, creates a top-level task. NOTE: Use 'subtasks' array instead for creating parent+children in one call.",
459
+ // },
460
+ // subtasks: {
461
+ // type: "array",
462
+ // items: {
463
+ // type: "object",
464
+ // properties: {
465
+ // title: {
466
+ // type: "string",
467
+ // description: "Subtask title",
468
+ // },
469
+ // content: {
470
+ // type: "string",
471
+ // description: "Subtask description/details",
472
+ // },
473
+ // topics: {
474
+ // type: "array",
475
+ // items: { type: "string" },
476
+ // description: "Topics/tags for this subtask",
477
+ // },
478
+ // status: {
479
+ // type: "string",
480
+ // enum: [
481
+ // "pending",
482
+ // "in_progress",
483
+ // "completed",
484
+ // "invalidated",
485
+ // ],
486
+ // description: "Subtask status (default: pending)",
487
+ // default: "pending",
488
+ // },
489
+ // priority: {
490
+ // type: "string",
491
+ // enum: ["urgent", "high", "medium", "low"],
492
+ // description:
493
+ // "Subtask priority level (default: medium)",
494
+ // default: "medium",
495
+ // },
496
+ // },
497
+ // required: ["title", "content"],
498
+ // },
499
+ // description:
500
+ // "Optional array of subtasks to create under this parent task. Each will be automatically linked to the parent.",
501
+ // },
502
+ // },
503
+ // required: ["title", "content"],
504
+ // },
505
+ // },
506
+ // ],
507
+ // description: "Single task object or array of task objects to create",
508
+ // },
509
+ // },
510
+ // required: ["space_id", "tasks"],
511
+ // },
512
+ // },
318
513
  {
319
- name: "add_task",
320
- description: "Create one or more tasks in your space with status tracking and priority levels. Supports BATCH creation and NESTED subtasks. Accepts a single task object or an array of task objects. Tasks have graph relationships like memories (entities, topics, temporal). REQUIRES space_id parameter. Example with subtasks: {tasks: {title: 'Parent', content: 'Main task', subtasks: [{title: 'Subtask 1', content: 'Child task'}]}}",
514
+ name: "update_memory",
515
+ description: "Unified tool for ALL memory operations: add, update, or delete context and tasks. Supports any combination of operations in a single call. Context = general information/knowledge (Memory nodes). Tasks = actionable workflow items (Task nodes). Max 50 operations per call. At least one operation (add/update/delete) required.",
321
516
  inputSchema: {
322
517
  type: "object",
323
518
  properties: {
324
519
  space_id: {
325
520
  type: "string",
326
- description: "REQUIRED: Space to create task/tasks in (use list_spaces to see available options)",
521
+ description: "REQUIRED: Space to operate in (use list_spaces to see available options)",
327
522
  },
328
- tasks: {
329
- oneOf: [
330
- {
331
- type: "object",
332
- properties: {
333
- title: {
334
- type: "string",
335
- description: "Task title/summary",
336
- },
337
- content: {
338
- type: "string",
339
- description: "Detailed task description",
340
- },
341
- topics: {
342
- type: "array",
343
- items: { type: "string" },
344
- description: "Optional topics/tags for organization",
345
- },
346
- status: {
347
- type: "string",
348
- enum: ["pending", "in_progress", "completed", "invalidated"],
349
- description: "Task status (default: pending)",
350
- default: "pending",
351
- },
352
- priority: {
353
- type: "string",
354
- enum: ["urgent", "high", "medium", "low"],
355
- description: "Task priority level (default: medium). Use 'urgent' for time-sensitive tasks requiring immediate attention, 'high' for important tasks, 'medium' for standard tasks, 'low' for nice-to-have tasks.",
356
- default: "medium",
357
- },
358
- parent_id: {
359
- type: "string",
360
- description: "Optional parent task ID to create this as a subtask. Use an existing task's ID (format: task_TIMESTAMP_ID) to nest this task under it. Use list_tasks to find parent task IDs. If omitted, creates a top-level task. NOTE: Use 'subtasks' array instead for creating parent+children in one call.",
361
- },
362
- subtasks: {
363
- type: "array",
364
- items: {
365
- type: "object",
366
- properties: {
367
- title: {
368
- type: "string",
369
- description: "Subtask title",
370
- },
371
- content: {
372
- type: "string",
373
- description: "Subtask description/details",
374
- },
375
- topics: {
376
- type: "array",
377
- items: { type: "string" },
378
- description: "Topics/tags for this subtask",
379
- },
380
- status: {
381
- type: "string",
382
- enum: [
383
- "pending",
384
- "in_progress",
385
- "completed",
386
- "invalidated",
387
- ],
388
- description: "Subtask status (default: pending)",
389
- default: "pending",
390
- },
391
- priority: {
392
- type: "string",
393
- enum: ["urgent", "high", "medium", "low"],
394
- description: "Subtask priority level (default: medium)",
395
- default: "medium",
396
- },
397
- },
398
- required: ["title", "content"],
523
+ add: {
524
+ type: "object",
525
+ description: "Add new context and/or tasks to memory",
526
+ properties: {
527
+ context: {
528
+ type: "array",
529
+ items: {
530
+ type: "object",
531
+ properties: {
532
+ title: { type: "string", description: "Context title" },
533
+ content: {
534
+ type: "string",
535
+ description: "Context content (general information)",
536
+ },
537
+ topics: {
538
+ type: "array",
539
+ items: { type: "string" },
540
+ description: "Optional topics/tags",
399
541
  },
400
- description: "Optional array of subtasks to create under this parent task. Each will be automatically linked to the parent.",
401
542
  },
543
+ required: ["title", "content"],
402
544
  },
403
- required: ["title", "content"],
545
+ description: "Array of context items to add",
404
546
  },
405
- {
547
+ tasks: {
406
548
  type: "array",
407
549
  items: {
408
550
  type: "object",
409
551
  properties: {
410
- title: {
411
- type: "string",
412
- description: "Task title/summary",
413
- },
414
- content: {
415
- type: "string",
416
- description: "Detailed task description",
417
- },
552
+ title: { type: "string", description: "Task title" },
553
+ content: { type: "string", description: "Task description" },
418
554
  topics: {
419
555
  type: "array",
420
556
  items: { type: "string" },
421
- description: "Optional topics/tags for organization",
557
+ description: "Optional topics/tags",
422
558
  },
423
559
  status: {
424
560
  type: "string",
@@ -429,190 +565,65 @@ const TOOLS = [
429
565
  "invalidated",
430
566
  ],
431
567
  description: "Task status (default: pending)",
432
- default: "pending",
433
568
  },
434
569
  priority: {
435
570
  type: "string",
436
571
  enum: ["urgent", "high", "medium", "low"],
437
- description: "Task priority level (default: medium). Use 'urgent' for time-sensitive tasks requiring immediate attention, 'high' for important tasks, 'medium' for standard tasks, 'low' for nice-to-have tasks.",
438
- default: "medium",
439
- },
440
- parent_id: {
441
- type: "string",
442
- description: "Optional parent task ID to create this as a subtask. Use an existing task's ID (format: task_TIMESTAMP_ID) to nest this task under it. Use list_tasks to find parent task IDs. If omitted, creates a top-level task. NOTE: Use 'subtasks' array instead for creating parent+children in one call.",
443
- },
444
- subtasks: {
445
- type: "array",
446
- items: {
447
- type: "object",
448
- properties: {
449
- title: {
450
- type: "string",
451
- description: "Subtask title",
452
- },
453
- content: {
454
- type: "string",
455
- description: "Subtask description/details",
456
- },
457
- topics: {
458
- type: "array",
459
- items: { type: "string" },
460
- description: "Topics/tags for this subtask",
461
- },
462
- status: {
463
- type: "string",
464
- enum: [
465
- "pending",
466
- "in_progress",
467
- "completed",
468
- "invalidated",
469
- ],
470
- description: "Subtask status (default: pending)",
471
- default: "pending",
472
- },
473
- priority: {
474
- type: "string",
475
- enum: ["urgent", "high", "medium", "low"],
476
- description: "Subtask priority level (default: medium)",
477
- default: "medium",
478
- },
479
- },
480
- required: ["title", "content"],
481
- },
482
- description: "Optional array of subtasks to create under this parent task. Each will be automatically linked to the parent.",
572
+ description: "Priority level (default: medium)",
483
573
  },
484
574
  },
485
575
  required: ["title", "content"],
486
576
  },
577
+ description: "Array of tasks to add",
487
578
  },
488
- ],
489
- description: "Single task object or array of task objects to create",
579
+ },
490
580
  },
491
- },
492
- required: ["space_id", "tasks"],
493
- },
494
- },
495
- {
496
- name: "update_memory",
497
- description: "Update memory with new CONTEXT and TASKS. Unified tool for adding new items to the memory system in one call. NOTE: 'Memories' encompasses both context (general information, stored as Memory nodes) and tasks (actionable items, stored as Task nodes). This tool is for ADDING new items to update the memory system, not modifying existing ones. At least one of context or tasks must be provided. REQUIRES space_id parameter.",
498
- inputSchema: {
499
- type: "object",
500
- properties: {
501
- space_id: {
502
- type: "string",
503
- description: "REQUIRED: Space to add items to (use list_spaces to see available options)",
504
- },
505
- context: {
506
- oneOf: [
507
- {
508
- type: "object",
509
- properties: {
510
- title: {
511
- type: "string",
512
- description: "Context item title",
513
- },
514
- content: {
515
- type: "string",
516
- description: "Context item content (general information/knowledge)",
517
- },
518
- topics: {
519
- type: "array",
520
- items: { type: "string" },
521
- description: "Optional topics/tags for organization",
522
- },
523
- source: {
524
- type: "string",
525
- enum: ["chatgpt", "claude-app", "claude-code", "intangle"],
526
- description: "Optional source indicator",
527
- },
528
- },
529
- required: ["title", "content"],
530
- },
531
- {
581
+ update: {
582
+ type: "object",
583
+ description: "Update existing context and/or tasks",
584
+ properties: {
585
+ context: {
532
586
  type: "array",
533
587
  items: {
534
588
  type: "object",
535
589
  properties: {
590
+ id: { type: "string", description: "Context ID to update" },
536
591
  title: {
537
592
  type: "string",
538
- description: "Context item title",
593
+ description: "New title (optional)",
539
594
  },
540
595
  content: {
541
596
  type: "string",
542
- description: "Context item content (general information/knowledge)",
597
+ description: "New content (optional)",
543
598
  },
544
599
  topics: {
545
600
  type: "array",
546
601
  items: { type: "string" },
547
- description: "Optional topics/tags for organization",
602
+ description: "New topics (optional)",
548
603
  },
549
- source: {
550
- type: "string",
551
- enum: ["chatgpt", "claude-app", "claude-code", "intangle"],
552
- description: "Optional source indicator",
553
- },
554
- },
555
- required: ["title", "content"],
556
- },
557
- },
558
- ],
559
- description: "Optional context items to add (general information/knowledge)",
560
- },
561
- tasks: {
562
- oneOf: [
563
- {
564
- type: "object",
565
- properties: {
566
- title: {
567
- type: "string",
568
- description: "Task title/summary",
569
- },
570
- content: {
571
- type: "string",
572
- description: "Detailed task description",
573
- },
574
- topics: {
575
- type: "array",
576
- items: { type: "string" },
577
- description: "Optional topics/tags for organization",
578
- },
579
- status: {
580
- type: "string",
581
- enum: ["pending", "in_progress", "completed", "invalidated"],
582
- description: "Task status (default: pending)",
583
- default: "pending",
584
- },
585
- priority: {
586
- type: "string",
587
- enum: ["urgent", "high", "medium", "low"],
588
- description: "Task priority level (default: medium)",
589
- default: "medium",
590
- },
591
- source: {
592
- type: "string",
593
- enum: ["chatgpt", "claude-app", "claude-code", "intangle"],
594
- description: "Optional source indicator",
595
604
  },
605
+ required: ["id"],
596
606
  },
597
- required: ["title", "content"],
607
+ description: "Array of context updates (must include id)",
598
608
  },
599
- {
609
+ tasks: {
600
610
  type: "array",
601
611
  items: {
602
612
  type: "object",
603
613
  properties: {
614
+ task_id: { type: "string", description: "Task ID to update" },
604
615
  title: {
605
616
  type: "string",
606
- description: "Task title/summary",
617
+ description: "New title (optional)",
607
618
  },
608
619
  content: {
609
620
  type: "string",
610
- description: "Detailed task description",
621
+ description: "New content (optional)",
611
622
  },
612
623
  topics: {
613
624
  type: "array",
614
625
  items: { type: "string" },
615
- description: "Optional topics/tags for organization",
626
+ description: "New topics (optional)",
616
627
  },
617
628
  status: {
618
629
  type: "string",
@@ -622,114 +633,126 @@ const TOOLS = [
622
633
  "completed",
623
634
  "invalidated",
624
635
  ],
625
- description: "Task status (default: pending)",
626
- default: "pending",
636
+ description: "New status (optional)",
627
637
  },
628
638
  priority: {
629
639
  type: "string",
630
640
  enum: ["urgent", "high", "medium", "low"],
631
- description: "Task priority level (default: medium)",
632
- default: "medium",
633
- },
634
- source: {
635
- type: "string",
636
- enum: ["chatgpt", "claude-app", "claude-code", "intangle"],
637
- description: "Optional source indicator",
641
+ description: "New priority (optional)",
638
642
  },
639
643
  },
640
- required: ["title", "content"],
644
+ required: ["task_id"],
641
645
  },
646
+ description: "Array of task updates (must include task_id)",
642
647
  },
643
- ],
644
- description: "Optional tasks to add (actionable workflow items)",
645
- },
646
- },
647
- required: ["space_id"],
648
- },
649
- },
650
- {
651
- name: "update_task_status",
652
- description: "Change a task's status (pending/in_progress/completed/invalidated)",
653
- inputSchema: {
654
- type: "object",
655
- properties: {
656
- task_id: {
657
- type: "string",
658
- description: "Task ID to update",
648
+ },
659
649
  },
660
- status: {
661
- type: "string",
662
- enum: ["pending", "in_progress", "completed", "invalidated"],
663
- description: "New status",
664
- },
665
- },
666
- required: ["task_id", "status"],
667
- },
668
- },
669
- {
670
- name: "update_task",
671
- description: "Update one or more TASKS (not context/memories - use add_memory to update context by creating new versions). Accepts a single update object or an array of update objects for batch updates. Each update must include task_id.",
672
- inputSchema: {
673
- type: "object",
674
- properties: {
675
- updates: {
676
- oneOf: [
677
- {
678
- type: "object",
679
- properties: {
680
- task_id: {
681
- type: "string",
682
- description: "Task ID to update",
683
- },
684
- title: {
685
- type: "string",
686
- description: "New title (optional)",
687
- },
688
- content: {
689
- type: "string",
690
- description: "New content (optional)",
691
- },
692
- topics: {
693
- type: "array",
694
- items: { type: "string" },
695
- description: "New topics array (optional)",
696
- },
697
- },
698
- required: ["task_id"],
650
+ delete: {
651
+ type: "object",
652
+ description: "Delete context and/or tasks by ID",
653
+ properties: {
654
+ context_ids: {
655
+ type: "array",
656
+ items: { type: "string" },
657
+ description: "Array of context IDs to delete",
699
658
  },
700
- {
659
+ task_ids: {
701
660
  type: "array",
702
- items: {
703
- type: "object",
704
- properties: {
705
- task_id: {
706
- type: "string",
707
- description: "Task ID to update",
708
- },
709
- title: {
710
- type: "string",
711
- description: "New title (optional)",
712
- },
713
- content: {
714
- type: "string",
715
- description: "New content (optional)",
716
- },
717
- topics: {
718
- type: "array",
719
- items: { type: "string" },
720
- description: "New topics array (optional)",
721
- },
722
- },
723
- required: ["task_id"],
724
- },
661
+ items: { type: "string" },
662
+ description: "Array of task IDs to delete",
725
663
  },
726
- ],
727
- description: "Single update object or array of update objects",
664
+ },
728
665
  },
729
666
  },
730
- required: ["updates"],
667
+ required: ["space_id"],
731
668
  },
732
669
  },
670
+ // DEPRECATED: Use update_memory instead (Nov 8, 2025)
671
+ // {
672
+ // name: "update_task_status",
673
+ // description:
674
+ // "Change a task's status (pending/in_progress/completed/invalidated)",
675
+ // inputSchema: {
676
+ // type: "object",
677
+ // properties: {
678
+ // task_id: {
679
+ // type: "string",
680
+ // description: "Task ID to update",
681
+ // },
682
+ // status: {
683
+ // type: "string",
684
+ // enum: ["pending", "in_progress", "completed", "invalidated"],
685
+ // description: "New status",
686
+ // },
687
+ // },
688
+ // required: ["task_id", "status"],
689
+ // },
690
+ // },
691
+ {
692
+ // DEPRECATED: Use update_memory instead (Nov 8, 2025)
693
+ // name: "update_task",
694
+ // description:
695
+ // "Update one or more TASKS (not context/memories - use add_memory to update context by creating new versions). Accepts a single update object or an array of update objects for batch updates. Each update must include task_id.",
696
+ // inputSchema: {
697
+ // type: "object",
698
+ // properties: {
699
+ // updates: {
700
+ // oneOf: [
701
+ // {
702
+ // type: "object",
703
+ // properties: {
704
+ // task_id: {
705
+ // type: "string",
706
+ // description: "Task ID to update",
707
+ // },
708
+ // title: {
709
+ // type: "string",
710
+ // description: "New title (optional)",
711
+ // },
712
+ // content: {
713
+ // type: "string",
714
+ // description: "New content (optional)",
715
+ // },
716
+ // topics: {
717
+ // type: "array",
718
+ // items: { type: "string" },
719
+ // description: "New topics array (optional)",
720
+ // },
721
+ // },
722
+ // required: ["task_id"],
723
+ // },
724
+ // {
725
+ // type: "array",
726
+ // items: {
727
+ // type: "object",
728
+ // properties: {
729
+ // task_id: {
730
+ // type: "string",
731
+ // description: "Task ID to update",
732
+ // },
733
+ // title: {
734
+ // type: "string",
735
+ // description: "New title (optional)",
736
+ // },
737
+ // content: {
738
+ // type: "string",
739
+ // description: "New content (optional)",
740
+ // },
741
+ // topics: {
742
+ // type: "array",
743
+ // items: { type: "string" },
744
+ // description: "New topics array (optional)",
745
+ // },
746
+ // },
747
+ // required: ["task_id"],
748
+ // },
749
+ // },
750
+ // ],
751
+ // description: "Single update object or array of update objects",
752
+ // },
753
+ // },
754
+ // required: ["updates"],
755
+ },
733
756
  {
734
757
  name: "list_tasks",
735
758
  description: "List tasks in a space with optional filtering",
@@ -759,30 +782,32 @@ const TOOLS = [
759
782
  required: ["space_id"],
760
783
  },
761
784
  },
762
- {
763
- name: "delete_task",
764
- description: "Delete one or more tasks in a single transaction. Accepts a single task ID or an array of task IDs for batch deletion.",
765
- inputSchema: {
766
- type: "object",
767
- properties: {
768
- task_ids: {
769
- oneOf: [
770
- {
771
- type: "string",
772
- description: "Single task ID to delete",
773
- },
774
- {
775
- type: "array",
776
- items: { type: "string" },
777
- description: "Array of task IDs to delete",
778
- },
779
- ],
780
- description: "Single task ID or array of task IDs to delete",
781
- },
782
- },
783
- required: ["task_ids"],
784
- },
785
- },
785
+ // DEPRECATED: Use update_memory instead (Nov 8, 2025)
786
+ // {
787
+ // name: "delete_task",
788
+ // description:
789
+ // "Delete one or more tasks in a single transaction. Accepts a single task ID or an array of task IDs for batch deletion.",
790
+ // inputSchema: {
791
+ // type: "object",
792
+ // properties: {
793
+ // task_ids: {
794
+ // oneOf: [
795
+ // {
796
+ // type: "string",
797
+ // description: "Single task ID to delete",
798
+ // },
799
+ // {
800
+ // type: "array",
801
+ // items: { type: "string" },
802
+ // description: "Array of task IDs to delete",
803
+ // },
804
+ // ],
805
+ // description: "Single task ID or array of task IDs to delete",
806
+ // },
807
+ // },
808
+ // required: ["task_ids"],
809
+ // },
810
+ // },
786
811
  ];
787
812
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
788
813
  tools: TOOLS,
@@ -831,14 +856,13 @@ async function handleFetch(args) {
831
856
  const { id, ids } = args;
832
857
  return makeApiCall("fetch", { id, ids });
833
858
  }
834
- async function handleGetEntities(args) {
835
- const { memory_id } = args;
836
- return makeApiCall("get-entities", { memory_id });
837
- }
838
- async function handleDeleteMemory(args) {
839
- const { memory_ids } = args;
859
+ /* async function handleDeleteMemory(args: any) {
860
+ const { memory_ids } = args as {
861
+ memory_ids: string | string[];
862
+ };
863
+
840
864
  return makeApiCall("delete-memory", { memory_ids });
841
- }
865
+ } */
842
866
  async function handleListSpaces() {
843
867
  return makeApiCall("list-spaces", {});
844
868
  }
@@ -853,31 +877,37 @@ async function handleStart(args) {
853
877
  const { space_id } = args;
854
878
  return makeApiCall("start", { space_id });
855
879
  }
856
- async function handleAddTask(args) {
880
+ /*
881
+ async function handleAddTask(args: any) {
857
882
  if (!args.space_id) {
858
- throw new Error("space_id is required. Use list_spaces to see available options.");
883
+ throw new Error(
884
+ "space_id is required. Use list_spaces to see available options.",
885
+ );
859
886
  }
887
+
860
888
  if (!args.tasks) {
861
889
  throw new Error("tasks parameter is required (single object or array)");
862
890
  }
891
+
863
892
  // Pass through to API
864
893
  return makeApiCall("add-task", {
865
894
  space_id: args.space_id,
866
895
  tasks: args.tasks,
867
896
  });
868
- }
897
+ } */
869
898
  async function handleUpdateMemory(args) {
870
899
  if (!args.space_id) {
871
900
  throw new Error("space_id is required. Use list_spaces to see available options.");
872
901
  }
873
- if (!args.context && !args.tasks) {
874
- throw new Error("At least one of context or tasks must be provided");
902
+ if (!args.add && !args.update && !args.delete) {
903
+ throw new Error("At least one operation (add, update, delete) must be provided");
875
904
  }
876
- // Pass through to API
905
+ // Pass through to API with new structure
877
906
  return makeApiCall("update-memory", {
878
907
  space_id: args.space_id,
879
- context: args.context,
880
- tasks: args.tasks,
908
+ add: args.add,
909
+ update: args.update,
910
+ delete: args.delete,
881
911
  });
882
912
  }
883
913
  async function handleUpdateTaskStatus(args) {
@@ -904,9 +934,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
904
934
  try {
905
935
  let result;
906
936
  switch (name) {
907
- case "add_memory":
908
- result = await handleAddMemory(args);
909
- break;
937
+ // DEPRECATED: case "add_memory":
938
+ // DEPRECATED: result = await handleAddMemory(args);
939
+ // DEPRECATED: break;
910
940
  case "search_memories":
911
941
  result = await handleSearchMemories(args);
912
942
  break;
@@ -920,9 +950,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
920
950
  // case "get_entities":
921
951
  // result = await handleGetEntities(args);
922
952
  // break;
923
- case "delete_memory":
924
- result = await handleDeleteMemory(args);
925
- break;
953
+ // DEPRECATED: case "delete_memory":
954
+ // DEPRECATED: result = await handleDeleteMemory(args);
955
+ // DEPRECATED: break;
926
956
  case "list_spaces":
927
957
  result = await handleListSpaces();
928
958
  break;
@@ -935,30 +965,33 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
935
965
  case "start":
936
966
  result = await handleStart(args);
937
967
  break;
938
- case "add_task":
939
- result = await handleAddTask(args);
940
- break;
968
+ // DEPRECATED: case "add_task":
969
+ // DEPRECATED: result = await handleAddTask(args);
970
+ // DEPRECATED: break;
941
971
  case "update_memory":
942
972
  result = await handleUpdateMemory(args);
943
973
  break;
944
- case "update_task_status":
945
- result = await handleUpdateTaskStatus(args);
946
- break;
947
- case "update_task":
948
- result = await handleUpdateTask(args);
949
- break;
974
+ // DEPRECATED: case "update_task_status":
975
+ // DEPRECATED: result = await handleUpdateTaskStatus(args);
976
+ // DEPRECATED: break;
977
+ // DEPRECATED: case "update_task":
978
+ // DEPRECATED: result = await handleUpdateTask(args);
979
+ // DEPRECATED: break;
950
980
  case "list_tasks":
951
981
  result = await handleListTasks(args);
952
982
  break;
953
- case "delete_task":
954
- result = await handleDeleteTask(args);
955
- break;
983
+ // DEPRECATED: case "delete_task":
984
+ // DEPRECATED: result = await handleDeleteTask(args);
985
+ // DEPRECATED: break;
956
986
  default:
957
987
  throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
958
988
  }
959
989
  // Extract response field for Layer 2 compressed tools, otherwise stringify full result
960
990
  let responseText;
961
- if (result && typeof result === 'object' && 'response' in result && typeof result.response === 'string') {
991
+ if (result &&
992
+ typeof result === "object" &&
993
+ "response" in result &&
994
+ typeof result.response === "string") {
962
995
  // Tool has Layer 2 compression - use the formatted response field
963
996
  responseText = result.response;
964
997
  }