@intangle/mcp-server 1.0.1 → 1.0.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/README.md CHANGED
@@ -8,17 +8,19 @@ Intangle is an AI memory system that gives Claude and other AI assistants persis
8
8
 
9
9
  **Important: You need an Intangle account to use this MCP server. Sign up at [intangle.app](https://intangle.app)**
10
10
 
11
- ## Installation
12
-
13
- ```bash
14
- npm install -g @intangle/mcp-server
15
- ```
16
-
17
11
  ## Setup
18
12
 
19
13
  1. **Create an Intangle account** at [intangle.app](https://intangle.app) and get your API key from Settings → Connect
20
14
 
21
- 2. **Configure Claude Desktop** by adding to your `claude_desktop_config.json`:
15
+ 2. **Configure Provider Access **
16
+
17
+ Claude code by running the command below (recommend "-s" user for global across projects):
18
+
19
+ ```bash
20
+ claude mcp add intangle -s user --env MCP_API_KEY=<your-api-key-here> --env NEXT_APP_URL=https://intangle.app -- npx -y @intangle/mcp-server
21
+ ```
22
+
23
+ Standard MCP (Claude desktop, Cursor): by adding to your `claude_desktop_config.json` or `mcp.json`:
22
24
 
23
25
  ```json
24
26
  {
package/dist/index.js CHANGED
@@ -184,6 +184,160 @@ const TOOLS = [
184
184
  required: ["space_id"],
185
185
  },
186
186
  },
187
+ {
188
+ name: "start",
189
+ 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.",
190
+ inputSchema: {
191
+ type: "object",
192
+ properties: {
193
+ space_id: {
194
+ type: "string",
195
+ description: "Space to start (e.g., 'renvoi', 'personal')",
196
+ },
197
+ },
198
+ required: ["space_id"],
199
+ },
200
+ },
201
+ {
202
+ name: "add_task",
203
+ description: "Create a task in your space with status tracking. Tasks have graph relationships like memories (entities, topics, temporal). REQUIRES space_id parameter.",
204
+ inputSchema: {
205
+ type: "object",
206
+ properties: {
207
+ space_id: {
208
+ type: "string",
209
+ description: "REQUIRED: Space to create task in (use list_spaces to see available options)",
210
+ },
211
+ title: {
212
+ type: "string",
213
+ description: "Task title/summary",
214
+ },
215
+ content: {
216
+ type: "string",
217
+ description: "Detailed task description",
218
+ },
219
+ topics: {
220
+ type: "array",
221
+ items: { type: "string" },
222
+ description: "Optional topics/tags for organization",
223
+ },
224
+ status: {
225
+ type: "string",
226
+ enum: ["pending", "in_progress", "completed", "invalidated"],
227
+ description: "Task status (default: pending)",
228
+ default: "pending",
229
+ },
230
+ parent_id: {
231
+ type: "string",
232
+ description: "Optional parent task ID to create this as a subtask",
233
+ },
234
+ },
235
+ required: ["space_id", "title", "content"],
236
+ },
237
+ },
238
+ {
239
+ name: "update_task_status",
240
+ description: "Change a task's status (pending/in_progress/completed/invalidated)",
241
+ inputSchema: {
242
+ type: "object",
243
+ properties: {
244
+ task_id: {
245
+ type: "string",
246
+ description: "Task ID to update",
247
+ },
248
+ status: {
249
+ type: "string",
250
+ enum: ["pending", "in_progress", "completed", "invalidated"],
251
+ description: "New status",
252
+ },
253
+ },
254
+ required: ["task_id", "status"],
255
+ },
256
+ },
257
+ {
258
+ name: "update_task",
259
+ description: "Update task title, content, or topics",
260
+ inputSchema: {
261
+ type: "object",
262
+ properties: {
263
+ task_id: {
264
+ type: "string",
265
+ description: "Task ID to update",
266
+ },
267
+ title: {
268
+ type: "string",
269
+ description: "New title (optional)",
270
+ },
271
+ content: {
272
+ type: "string",
273
+ description: "New content (optional)",
274
+ },
275
+ topics: {
276
+ type: "array",
277
+ items: { type: "string" },
278
+ description: "New topics array (optional)",
279
+ },
280
+ },
281
+ required: ["task_id"],
282
+ },
283
+ },
284
+ {
285
+ name: "list_tasks",
286
+ description: "List tasks in a space with optional filtering",
287
+ inputSchema: {
288
+ type: "object",
289
+ properties: {
290
+ space_id: {
291
+ type: "string",
292
+ description: "Space to list tasks from",
293
+ },
294
+ status: {
295
+ type: "string",
296
+ enum: ["pending", "in_progress", "completed", "invalidated"],
297
+ description: "Optional: Filter by status",
298
+ },
299
+ topics: {
300
+ type: "array",
301
+ items: { type: "string" },
302
+ description: "Optional: Filter by topics",
303
+ },
304
+ limit: {
305
+ type: "number",
306
+ description: "Maximum number of tasks to return",
307
+ default: 50,
308
+ },
309
+ },
310
+ required: ["space_id"],
311
+ },
312
+ },
313
+ {
314
+ name: "delete_task",
315
+ description: "Delete a task and its relationships",
316
+ inputSchema: {
317
+ type: "object",
318
+ properties: {
319
+ task_id: {
320
+ type: "string",
321
+ description: "ID of task to delete",
322
+ },
323
+ },
324
+ required: ["task_id"],
325
+ },
326
+ },
327
+ {
328
+ name: "list_subtasks",
329
+ description: "Get all subtasks of a parent task",
330
+ inputSchema: {
331
+ type: "object",
332
+ properties: {
333
+ parent_id: {
334
+ type: "string",
335
+ description: "Parent task ID",
336
+ },
337
+ },
338
+ required: ["parent_id"],
339
+ },
340
+ },
187
341
  ];
188
342
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
189
343
  tools: TOOLS,
@@ -243,6 +397,28 @@ async function handleGetSpaceInfo(args) {
243
397
  const { space_id } = args;
244
398
  return makeApiCall("get-space-info", { space_id });
245
399
  }
400
+ async function handleStart(args) {
401
+ const { space_id } = args;
402
+ return makeApiCall("start", { space_id });
403
+ }
404
+ async function handleAddTask(args) {
405
+ return makeApiCall("add-task", args);
406
+ }
407
+ async function handleUpdateTaskStatus(args) {
408
+ return makeApiCall("update-task-status", args);
409
+ }
410
+ async function handleUpdateTask(args) {
411
+ return makeApiCall("update-task", args);
412
+ }
413
+ async function handleListTasks(args) {
414
+ return makeApiCall("list-tasks", args);
415
+ }
416
+ async function handleDeleteTask(args) {
417
+ return makeApiCall("delete-task", args);
418
+ }
419
+ async function handleListSubtasks(args) {
420
+ return makeApiCall("list-subtasks", args);
421
+ }
246
422
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
247
423
  const { name, arguments: args } = request.params;
248
424
  try {
@@ -272,6 +448,27 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
272
448
  case "get_space_info":
273
449
  result = await handleGetSpaceInfo(args);
274
450
  break;
451
+ case "start":
452
+ result = await handleStart(args);
453
+ break;
454
+ case "add_task":
455
+ result = await handleAddTask(args);
456
+ break;
457
+ case "update_task_status":
458
+ result = await handleUpdateTaskStatus(args);
459
+ break;
460
+ case "update_task":
461
+ result = await handleUpdateTask(args);
462
+ break;
463
+ case "list_tasks":
464
+ result = await handleListTasks(args);
465
+ break;
466
+ case "delete_task":
467
+ result = await handleDeleteTask(args);
468
+ break;
469
+ case "list_subtasks":
470
+ result = await handleListSubtasks(args);
471
+ break;
275
472
  default:
276
473
  throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
277
474
  }
package/index.ts CHANGED
@@ -217,6 +217,163 @@ const TOOLS = [
217
217
  required: ["space_id"],
218
218
  },
219
219
  },
220
+ {
221
+ name: "start",
222
+ description:
223
+ "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.",
224
+ inputSchema: {
225
+ type: "object",
226
+ properties: {
227
+ space_id: {
228
+ type: "string",
229
+ description: "Space to start (e.g., 'renvoi', 'personal')",
230
+ },
231
+ },
232
+ required: ["space_id"],
233
+ },
234
+ },
235
+ {
236
+ name: "add_task",
237
+ description:
238
+ "Create a task in your space with status tracking. Tasks have graph relationships like memories (entities, topics, temporal). REQUIRES space_id parameter.",
239
+ inputSchema: {
240
+ type: "object",
241
+ properties: {
242
+ space_id: {
243
+ type: "string",
244
+ description:
245
+ "REQUIRED: Space to create task in (use list_spaces to see available options)",
246
+ },
247
+ title: {
248
+ type: "string",
249
+ description: "Task title/summary",
250
+ },
251
+ content: {
252
+ type: "string",
253
+ description: "Detailed task description",
254
+ },
255
+ topics: {
256
+ type: "array",
257
+ items: { type: "string" },
258
+ description: "Optional topics/tags for organization",
259
+ },
260
+ status: {
261
+ type: "string",
262
+ enum: ["pending", "in_progress", "completed", "invalidated"],
263
+ description: "Task status (default: pending)",
264
+ default: "pending",
265
+ },
266
+ parent_id: {
267
+ type: "string",
268
+ description: "Optional parent task ID to create this as a subtask",
269
+ },
270
+ },
271
+ required: ["space_id", "title", "content"],
272
+ },
273
+ },
274
+ {
275
+ name: "update_task_status",
276
+ description: "Change a task's status (pending/in_progress/completed/invalidated)",
277
+ inputSchema: {
278
+ type: "object",
279
+ properties: {
280
+ task_id: {
281
+ type: "string",
282
+ description: "Task ID to update",
283
+ },
284
+ status: {
285
+ type: "string",
286
+ enum: ["pending", "in_progress", "completed", "invalidated"],
287
+ description: "New status",
288
+ },
289
+ },
290
+ required: ["task_id", "status"],
291
+ },
292
+ },
293
+ {
294
+ name: "update_task",
295
+ description: "Update task title, content, or topics",
296
+ inputSchema: {
297
+ type: "object",
298
+ properties: {
299
+ task_id: {
300
+ type: "string",
301
+ description: "Task ID to update",
302
+ },
303
+ title: {
304
+ type: "string",
305
+ description: "New title (optional)",
306
+ },
307
+ content: {
308
+ type: "string",
309
+ description: "New content (optional)",
310
+ },
311
+ topics: {
312
+ type: "array",
313
+ items: { type: "string" },
314
+ description: "New topics array (optional)",
315
+ },
316
+ },
317
+ required: ["task_id"],
318
+ },
319
+ },
320
+ {
321
+ name: "list_tasks",
322
+ description: "List tasks in a space with optional filtering",
323
+ inputSchema: {
324
+ type: "object",
325
+ properties: {
326
+ space_id: {
327
+ type: "string",
328
+ description: "Space to list tasks from",
329
+ },
330
+ status: {
331
+ type: "string",
332
+ enum: ["pending", "in_progress", "completed", "invalidated"],
333
+ description: "Optional: Filter by status",
334
+ },
335
+ topics: {
336
+ type: "array",
337
+ items: { type: "string" },
338
+ description: "Optional: Filter by topics",
339
+ },
340
+ limit: {
341
+ type: "number",
342
+ description: "Maximum number of tasks to return",
343
+ default: 50,
344
+ },
345
+ },
346
+ required: ["space_id"],
347
+ },
348
+ },
349
+ {
350
+ name: "delete_task",
351
+ description: "Delete a task and its relationships",
352
+ inputSchema: {
353
+ type: "object",
354
+ properties: {
355
+ task_id: {
356
+ type: "string",
357
+ description: "ID of task to delete",
358
+ },
359
+ },
360
+ required: ["task_id"],
361
+ },
362
+ },
363
+ {
364
+ name: "list_subtasks",
365
+ description: "Get all subtasks of a parent task",
366
+ inputSchema: {
367
+ type: "object",
368
+ properties: {
369
+ parent_id: {
370
+ type: "string",
371
+ description: "Parent task ID",
372
+ },
373
+ },
374
+ required: ["parent_id"],
375
+ },
376
+ },
220
377
  ];
221
378
 
222
379
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
@@ -321,6 +478,35 @@ async function handleGetSpaceInfo(args: any) {
321
478
  return makeApiCall("get-space-info", { space_id });
322
479
  }
323
480
 
481
+ async function handleStart(args: any) {
482
+ const { space_id } = args as { space_id: string };
483
+ return makeApiCall("start", { space_id });
484
+ }
485
+
486
+ async function handleAddTask(args: any) {
487
+ return makeApiCall("add-task", args);
488
+ }
489
+
490
+ async function handleUpdateTaskStatus(args: any) {
491
+ return makeApiCall("update-task-status", args);
492
+ }
493
+
494
+ async function handleUpdateTask(args: any) {
495
+ return makeApiCall("update-task", args);
496
+ }
497
+
498
+ async function handleListTasks(args: any) {
499
+ return makeApiCall("list-tasks", args);
500
+ }
501
+
502
+ async function handleDeleteTask(args: any) {
503
+ return makeApiCall("delete-task", args);
504
+ }
505
+
506
+ async function handleListSubtasks(args: any) {
507
+ return makeApiCall("list-subtasks", args);
508
+ }
509
+
324
510
  server.setRequestHandler(CallToolRequestSchema, async (request: any) => {
325
511
  const { name, arguments: args } = request.params;
326
512
 
@@ -352,6 +538,27 @@ server.setRequestHandler(CallToolRequestSchema, async (request: any) => {
352
538
  case "get_space_info":
353
539
  result = await handleGetSpaceInfo(args);
354
540
  break;
541
+ case "start":
542
+ result = await handleStart(args);
543
+ break;
544
+ case "add_task":
545
+ result = await handleAddTask(args);
546
+ break;
547
+ case "update_task_status":
548
+ result = await handleUpdateTaskStatus(args);
549
+ break;
550
+ case "update_task":
551
+ result = await handleUpdateTask(args);
552
+ break;
553
+ case "list_tasks":
554
+ result = await handleListTasks(args);
555
+ break;
556
+ case "delete_task":
557
+ result = await handleDeleteTask(args);
558
+ break;
559
+ case "list_subtasks":
560
+ result = await handleListSubtasks(args);
561
+ break;
355
562
  default:
356
563
  throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
357
564
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intangle/mcp-server",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
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",