@intangle/mcp-server 1.0.9 → 1.1.0

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 +97 -29
  2. package/index.ts +99 -31
  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.8";
25
+ const CURRENT_VERSION = "1.1.0";
26
26
  let latestVersion = null;
27
27
  let versionCheckDone = false;
28
28
  async function checkVersion() {
@@ -75,7 +75,7 @@ const server = new Server({
75
75
  const TOOLS = [
76
76
  {
77
77
  name: "add_memory",
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.",
78
+ 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.",
79
79
  inputSchema: {
80
80
  type: "object",
81
81
  properties: {
@@ -135,7 +135,7 @@ const TOOLS = [
135
135
  },
136
136
  {
137
137
  name: "search_memories",
138
- description: "Search through stored memories using advanced hybrid search (semantic + text + entity relationships). ALWAYS provide space_id parameter - this is mandatory for all searches.",
138
+ 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.",
139
139
  inputSchema: {
140
140
  type: "object",
141
141
  properties: {
@@ -163,7 +163,7 @@ const TOOLS = [
163
163
  },
164
164
  {
165
165
  name: "get_recent_memories",
166
- description: "Get the most recent memories stored in the system. REQUIRES space_id parameter.",
166
+ description: "Get the most recent CONTEXT items (general information). For recent tasks, use list_tasks instead. NOTE: This tool is called 'get_recent_memories' (not 'fetch'). Returns fully decrypted data. REQUIRES space_id parameter.",
167
167
  inputSchema: {
168
168
  type: "object",
169
169
  properties: {
@@ -187,20 +187,20 @@ const TOOLS = [
187
187
  },
188
188
  {
189
189
  name: "get_entities",
190
- description: "Get extracted entities (people, places, concepts) from memories",
190
+ description: "Get extracted entities (people, places, concepts) from CONTEXT items (general information). If no memory_id provided, returns top 20 most frequently mentioned entities across all context. WARNING: This tool can return large responses - use sparingly and only when entity information is specifically needed.",
191
191
  inputSchema: {
192
192
  type: "object",
193
193
  properties: {
194
194
  memory_id: {
195
195
  type: "string",
196
- description: "Optional memory ID to get entities for specific memory",
196
+ description: "Memory ID to get entities for. RECOMMENDED: Always provide memory_id to get focused results.",
197
197
  },
198
198
  },
199
199
  },
200
200
  },
201
201
  {
202
202
  name: "delete_memory",
203
- description: "Delete one or more memories in a single transaction. Accepts a single memory ID or an array of memory IDs for batch deletion.",
203
+ 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.",
204
204
  inputSchema: {
205
205
  type: "object",
206
206
  properties: {
@@ -222,17 +222,9 @@ const TOOLS = [
222
222
  required: ["memory_ids"],
223
223
  },
224
224
  },
225
- {
226
- name: "debug_memory_structure",
227
- description: "Debug tool to inspect the current memory structure in the database",
228
- inputSchema: {
229
- type: "object",
230
- properties: {},
231
- },
232
- },
233
225
  {
234
226
  name: "list_spaces",
235
- description: "Get all available spaces with their descriptions and memory counts",
227
+ 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).",
236
228
  inputSchema: {
237
229
  type: "object",
238
230
  properties: {},
@@ -240,7 +232,7 @@ const TOOLS = [
240
232
  },
241
233
  {
242
234
  name: "create_space",
243
- description: "Create a new space with optional startup configuration. The 'start' tool loads this configuration when beginning work in this space. Checks user's plan limits and returns upgrade link if limit reached.",
235
+ description: "Create a new space with optional startup configuration. Spaces are top-level containers that hold both context (general information) and tasks (actionable items). The 'start' tool loads this configuration when beginning work in this space. Checks user's plan limits and returns upgrade link if limit reached.",
244
236
  inputSchema: {
245
237
  type: "object",
246
238
  properties: {
@@ -250,7 +242,7 @@ const TOOLS = [
250
242
  },
251
243
  description: {
252
244
  type: "string",
253
- description: "Brief description of what this space is for (e.g., 'Work-related memories and tasks')",
245
+ description: "Brief description of what this space is for (e.g., 'Work-related context and tasks')",
254
246
  },
255
247
  startup_context: {
256
248
  type: "string",
@@ -285,7 +277,7 @@ const TOOLS = [
285
277
  },
286
278
  {
287
279
  name: "start",
288
- description: "Start working in a space and get its context. Returns static context, auto-searched memories, preferences, and optionally pending tasks. Call this when starting a conversation in a space to get relevant context.",
280
+ description: "Start working in a space and get comprehensive initialization. Returns static context, auto-searched context (general information), preferences, and optionally pending tasks. This tool retrieves BOTH context AND tasks based on space configuration. Call this when starting a conversation in a space to get relevant information.",
289
281
  inputSchema: {
290
282
  type: "object",
291
283
  properties: {
@@ -299,7 +291,7 @@ const TOOLS = [
299
291
  },
300
292
  {
301
293
  name: "add_task",
302
- 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.",
294
+ 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'}]}}",
303
295
  inputSchema: {
304
296
  type: "object",
305
297
  properties: {
@@ -331,9 +323,50 @@ const TOOLS = [
331
323
  description: "Task status (default: pending)",
332
324
  default: "pending",
333
325
  },
326
+ priority: {
327
+ type: "string",
328
+ enum: ["urgent", "high", "medium", "low"],
329
+ 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.",
330
+ default: "medium",
331
+ },
334
332
  parent_id: {
335
333
  type: "string",
336
- description: "Optional parent task ID to create this as a subtask",
334
+ 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.",
335
+ },
336
+ subtasks: {
337
+ type: "array",
338
+ items: {
339
+ type: "object",
340
+ properties: {
341
+ title: {
342
+ type: "string",
343
+ description: "Subtask title",
344
+ },
345
+ content: {
346
+ type: "string",
347
+ description: "Subtask description/details",
348
+ },
349
+ topics: {
350
+ type: "array",
351
+ items: { type: "string" },
352
+ description: "Topics/tags for this subtask",
353
+ },
354
+ status: {
355
+ type: "string",
356
+ enum: ["pending", "in_progress", "completed", "invalidated"],
357
+ description: "Subtask status (default: pending)",
358
+ default: "pending",
359
+ },
360
+ priority: {
361
+ type: "string",
362
+ enum: ["urgent", "high", "medium", "low"],
363
+ description: "Subtask priority level (default: medium)",
364
+ default: "medium",
365
+ },
366
+ },
367
+ required: ["title", "content"],
368
+ },
369
+ description: "Optional array of subtasks to create under this parent task. Each will be automatically linked to the parent.",
337
370
  },
338
371
  },
339
372
  required: ["title", "content"],
@@ -362,9 +395,50 @@ const TOOLS = [
362
395
  description: "Task status (default: pending)",
363
396
  default: "pending",
364
397
  },
398
+ priority: {
399
+ type: "string",
400
+ enum: ["urgent", "high", "medium", "low"],
401
+ 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.",
402
+ default: "medium",
403
+ },
365
404
  parent_id: {
366
405
  type: "string",
367
- description: "Optional parent task ID to create this as a subtask",
406
+ 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.",
407
+ },
408
+ subtasks: {
409
+ type: "array",
410
+ items: {
411
+ type: "object",
412
+ properties: {
413
+ title: {
414
+ type: "string",
415
+ description: "Subtask title",
416
+ },
417
+ content: {
418
+ type: "string",
419
+ description: "Subtask description/details",
420
+ },
421
+ topics: {
422
+ type: "array",
423
+ items: { type: "string" },
424
+ description: "Topics/tags for this subtask",
425
+ },
426
+ status: {
427
+ type: "string",
428
+ enum: ["pending", "in_progress", "completed", "invalidated"],
429
+ description: "Subtask status (default: pending)",
430
+ default: "pending",
431
+ },
432
+ priority: {
433
+ type: "string",
434
+ enum: ["urgent", "high", "medium", "low"],
435
+ description: "Subtask priority level (default: medium)",
436
+ default: "medium",
437
+ },
438
+ },
439
+ required: ["title", "content"],
440
+ },
441
+ description: "Optional array of subtasks to create under this parent task. Each will be automatically linked to the parent.",
368
442
  },
369
443
  },
370
444
  required: ["title", "content"],
@@ -398,7 +472,7 @@ const TOOLS = [
398
472
  },
399
473
  {
400
474
  name: "update_task",
401
- 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.",
475
+ 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.",
402
476
  inputSchema: {
403
477
  type: "object",
404
478
  properties: {
@@ -565,9 +639,6 @@ async function handleDeleteMemory(args) {
565
639
  const { memory_ids } = args;
566
640
  return makeApiCall("delete-memory", { memory_ids });
567
641
  }
568
- async function handleDebugStructure() {
569
- return makeApiCall("debug-structure", {});
570
- }
571
642
  async function handleListSpaces() {
572
643
  return makeApiCall("list-spaces", {});
573
644
  }
@@ -634,9 +705,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
634
705
  case "delete_memory":
635
706
  result = await handleDeleteMemory(args);
636
707
  break;
637
- case "debug_memory_structure":
638
- result = await handleDebugStructure();
639
- break;
640
708
  case "list_spaces":
641
709
  result = await handleListSpaces();
642
710
  break;
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.8";
38
+ const CURRENT_VERSION = "1.1.0";
39
39
  let latestVersion: string | null = null;
40
40
  let versionCheckDone = false;
41
41
 
@@ -100,7 +100,7 @@ const TOOLS = [
100
100
  {
101
101
  name: "add_memory",
102
102
  description:
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.",
103
+ "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.",
104
104
  inputSchema: {
105
105
  type: "object",
106
106
  properties: {
@@ -164,7 +164,7 @@ const TOOLS = [
164
164
  {
165
165
  name: "search_memories",
166
166
  description:
167
- "Search through stored memories using advanced hybrid search (semantic + text + entity relationships). ALWAYS provide space_id parameter - this is mandatory for all searches.",
167
+ "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.",
168
168
  inputSchema: {
169
169
  type: "object",
170
170
  properties: {
@@ -194,7 +194,7 @@ const TOOLS = [
194
194
  {
195
195
  name: "get_recent_memories",
196
196
  description:
197
- "Get the most recent memories stored in the system. REQUIRES space_id parameter.",
197
+ "Get the most recent CONTEXT items (general information). For recent tasks, use list_tasks instead. NOTE: This tool is called 'get_recent_memories' (not 'fetch'). Returns fully decrypted data. REQUIRES space_id parameter.",
198
198
  inputSchema: {
199
199
  type: "object",
200
200
  properties: {
@@ -220,20 +220,20 @@ const TOOLS = [
220
220
  {
221
221
  name: "get_entities",
222
222
  description:
223
- "Get extracted entities (people, places, concepts) from memories",
223
+ "Get extracted entities (people, places, concepts) from CONTEXT items (general information). If no memory_id provided, returns top 20 most frequently mentioned entities across all context. WARNING: This tool can return large responses - use sparingly and only when entity information is specifically needed.",
224
224
  inputSchema: {
225
225
  type: "object",
226
226
  properties: {
227
227
  memory_id: {
228
228
  type: "string",
229
- description: "Optional memory ID to get entities for specific memory",
229
+ description: "Memory ID to get entities for. RECOMMENDED: Always provide memory_id to get focused results.",
230
230
  },
231
231
  },
232
232
  },
233
233
  },
234
234
  {
235
235
  name: "delete_memory",
236
- description: "Delete one or more memories in a single transaction. Accepts a single memory ID or an array of memory IDs for batch deletion.",
236
+ 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.",
237
237
  inputSchema: {
238
238
  type: "object",
239
239
  properties: {
@@ -255,19 +255,10 @@ const TOOLS = [
255
255
  required: ["memory_ids"],
256
256
  },
257
257
  },
258
- {
259
- name: "debug_memory_structure",
260
- description:
261
- "Debug tool to inspect the current memory structure in the database",
262
- inputSchema: {
263
- type: "object",
264
- properties: {},
265
- },
266
- },
267
258
  {
268
259
  name: "list_spaces",
269
260
  description:
270
- "Get all available spaces with their descriptions and memory counts",
261
+ "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).",
271
262
  inputSchema: {
272
263
  type: "object",
273
264
  properties: {},
@@ -276,7 +267,7 @@ const TOOLS = [
276
267
  {
277
268
  name: "create_space",
278
269
  description:
279
- "Create a new space with optional startup configuration. The 'start' tool loads this configuration when beginning work in this space. Checks user's plan limits and returns upgrade link if limit reached.",
270
+ "Create a new space with optional startup configuration. Spaces are top-level containers that hold both context (general information) and tasks (actionable items). The 'start' tool loads this configuration when beginning work in this space. Checks user's plan limits and returns upgrade link if limit reached.",
280
271
  inputSchema: {
281
272
  type: "object",
282
273
  properties: {
@@ -286,7 +277,7 @@ const TOOLS = [
286
277
  },
287
278
  description: {
288
279
  type: "string",
289
- description: "Brief description of what this space is for (e.g., 'Work-related memories and tasks')",
280
+ description: "Brief description of what this space is for (e.g., 'Work-related context and tasks')",
290
281
  },
291
282
  startup_context: {
292
283
  type: "string",
@@ -322,7 +313,7 @@ const TOOLS = [
322
313
  {
323
314
  name: "start",
324
315
  description:
325
- "Start working in a space and get its context. Returns static context, auto-searched memories, preferences, and optionally pending tasks. Call this when starting a conversation in a space to get relevant context.",
316
+ "Start working in a space and get comprehensive initialization. Returns static context, auto-searched context (general information), preferences, and optionally pending tasks. This tool retrieves BOTH context AND tasks based on space configuration. Call this when starting a conversation in a space to get relevant information.",
326
317
  inputSchema: {
327
318
  type: "object",
328
319
  properties: {
@@ -337,7 +328,7 @@ const TOOLS = [
337
328
  {
338
329
  name: "add_task",
339
330
  description:
340
- "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.",
331
+ "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'}]}}",
341
332
  inputSchema: {
342
333
  type: "object",
343
334
  properties: {
@@ -370,9 +361,51 @@ const TOOLS = [
370
361
  description: "Task status (default: pending)",
371
362
  default: "pending",
372
363
  },
364
+ priority: {
365
+ type: "string",
366
+ enum: ["urgent", "high", "medium", "low"],
367
+ description:
368
+ "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.",
369
+ default: "medium",
370
+ },
373
371
  parent_id: {
374
372
  type: "string",
375
- description: "Optional parent task ID to create this as a subtask",
373
+ 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.",
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: ["pending", "in_progress", "completed", "invalidated"],
396
+ description: "Subtask status (default: pending)",
397
+ default: "pending",
398
+ },
399
+ priority: {
400
+ type: "string",
401
+ enum: ["urgent", "high", "medium", "low"],
402
+ description: "Subtask priority level (default: medium)",
403
+ default: "medium",
404
+ },
405
+ },
406
+ required: ["title", "content"],
407
+ },
408
+ description: "Optional array of subtasks to create under this parent task. Each will be automatically linked to the parent.",
376
409
  },
377
410
  },
378
411
  required: ["title", "content"],
@@ -401,9 +434,51 @@ const TOOLS = [
401
434
  description: "Task status (default: pending)",
402
435
  default: "pending",
403
436
  },
437
+ priority: {
438
+ type: "string",
439
+ enum: ["urgent", "high", "medium", "low"],
440
+ description:
441
+ "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.",
442
+ default: "medium",
443
+ },
404
444
  parent_id: {
405
445
  type: "string",
406
- description: "Optional parent task ID to create this as a subtask",
446
+ 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.",
447
+ },
448
+ subtasks: {
449
+ type: "array",
450
+ items: {
451
+ type: "object",
452
+ properties: {
453
+ title: {
454
+ type: "string",
455
+ description: "Subtask title",
456
+ },
457
+ content: {
458
+ type: "string",
459
+ description: "Subtask description/details",
460
+ },
461
+ topics: {
462
+ type: "array",
463
+ items: { type: "string" },
464
+ description: "Topics/tags for this subtask",
465
+ },
466
+ status: {
467
+ type: "string",
468
+ enum: ["pending", "in_progress", "completed", "invalidated"],
469
+ description: "Subtask status (default: pending)",
470
+ default: "pending",
471
+ },
472
+ priority: {
473
+ type: "string",
474
+ enum: ["urgent", "high", "medium", "low"],
475
+ description: "Subtask priority level (default: medium)",
476
+ default: "medium",
477
+ },
478
+ },
479
+ required: ["title", "content"],
480
+ },
481
+ description: "Optional array of subtasks to create under this parent task. Each will be automatically linked to the parent.",
407
482
  },
408
483
  },
409
484
  required: ["title", "content"],
@@ -437,7 +512,7 @@ const TOOLS = [
437
512
  },
438
513
  {
439
514
  name: "update_task",
440
- 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.",
515
+ 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.",
441
516
  inputSchema: {
442
517
  type: "object",
443
518
  properties: {
@@ -645,10 +720,6 @@ async function handleDeleteMemory(args: any) {
645
720
  return makeApiCall("delete-memory", { memory_ids });
646
721
  }
647
722
 
648
- async function handleDebugStructure() {
649
- return makeApiCall("debug-structure", {});
650
- }
651
-
652
723
  async function handleListSpaces() {
653
724
  return makeApiCall("list-spaces", {});
654
725
  }
@@ -734,9 +805,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request: any) => {
734
805
  case "delete_memory":
735
806
  result = await handleDeleteMemory(args);
736
807
  break;
737
- case "debug_memory_structure":
738
- result = await handleDebugStructure();
739
- break;
740
808
  case "list_spaces":
741
809
  result = await handleListSpaces();
742
810
  break;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intangle/mcp-server",
3
- "version": "1.0.9",
3
+ "version": "1.1.0",
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",