@intangle/mcp-server 1.2.7 → 2.0.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.
package/.env.local ADDED
@@ -0,0 +1,2 @@
1
+ MCP_API_KEY=mcp_placeholder_key_will_be_replaced_by_user_specific_key
2
+ NEXT_APP_URL=https://intangle.app
package/dist/index.js CHANGED
@@ -39,7 +39,7 @@ async function checkVersion() {
39
39
  latestVersion = data.version;
40
40
  versionCheckDone = true;
41
41
  if (latestVersion && latestVersion !== CURRENT_VERSION) {
42
- console.warn("\n⚠️ UPDATE AVAILABLE ⚠️");
42
+ console.warn("\n UPDATE AVAILABLE ");
43
43
  console.warn(`Current version: ${CURRENT_VERSION}`);
44
44
  console.warn(`Latest version: ${latestVersion}`);
45
45
  console.warn("Update with: npx @intangle/mcp-server@latest\n");
@@ -84,7 +84,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
84
84
  tools: TOOLS,
85
85
  }));
86
86
  async function handleSearchMemories(args) {
87
- const { space_id, query, topics, } = args;
87
+ const { space_id, query, topics } = args;
88
88
  // Require space_id
89
89
  if (!space_id) {
90
90
  throw new Error("space_id is required. Use list_spaces to see available options.");
@@ -96,18 +96,6 @@ async function handleSearchMemories(args) {
96
96
  topics,
97
97
  });
98
98
  }
99
- async function handleGetRecentMemories(args) {
100
- const { space_id, topics, limit = 20, } = args;
101
- // Require space_id to be provided
102
- if (!space_id) {
103
- throw new Error("space_id is required. Use list_spaces to see available options.");
104
- }
105
- return makeApiCall("get-recent-memories", {
106
- space_id,
107
- topics,
108
- limit,
109
- });
110
- }
111
99
  async function handleFetch(args) {
112
100
  const { id, ids } = args;
113
101
  return makeApiCall("fetch", { id, ids });
@@ -141,9 +129,6 @@ async function handleUpdateSpace(args) {
141
129
  delete: args.delete,
142
130
  });
143
131
  }
144
- async function handleListTasks(args) {
145
- return makeApiCall("list-tasks", args);
146
- }
147
132
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
148
133
  const { name, arguments: args } = request.params;
149
134
  try {
@@ -152,9 +137,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
152
137
  case "search":
153
138
  result = await handleSearchMemories(args);
154
139
  break;
155
- case "get_recent_memories":
156
- result = await handleGetRecentMemories(args);
157
- break;
158
140
  case "fetch":
159
141
  result = await handleFetch(args);
160
142
  break;
@@ -173,9 +155,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
173
155
  case "update_space":
174
156
  result = await handleUpdateSpace(args);
175
157
  break;
176
- case "list_tasks":
177
- result = await handleListTasks(args);
178
- break;
179
158
  default:
180
159
  throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
181
160
  }
@@ -194,7 +173,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
194
173
  }
195
174
  // Add version warning to response if outdated
196
175
  if (latestVersion && latestVersion !== CURRENT_VERSION) {
197
- const warning = `\n\n⚠️ UPDATE AVAILABLE: MCP Server v${latestVersion} is available (you're on v${CURRENT_VERSION}). Update with: npx @intangle/mcp-server@latest`;
176
+ const warning = `\n\n UPDATE AVAILABLE: MCP Server v${latestVersion} is available (you're on v${CURRENT_VERSION}). Update with: npx @intangle/mcp-server@latest`;
198
177
  responseText += warning;
199
178
  }
200
179
  return {
@@ -3,13 +3,13 @@ export const TOOLS = [
3
3
  {
4
4
  name: "search",
5
5
  title: "Search Space",
6
- description: "Search for information within a space. System automatically extracts quantity from natural language ('show 3 tasks' → 3 results, 'the last one' → 1 result), determines optimal depth from query complexity ('quick search' → quick mode, 'search deep' → deep mode), and intelligently formats results (1-3 items → summaries, 4+ items → IDs only). Use fetch tool to get full content for specific IDs when needed.",
6
+ description: "Search for information within a space. System automatically extracts quantity from natural language ('show 3 tasks' → 3 results, 'the last one' → 1 result) and intelligently formats results (1-3 items → summaries, 4+ items → IDs only). Use fetch tool to get full content for specific IDs when needed.",
7
7
  inputSchema: {
8
8
  type: "object",
9
9
  properties: {
10
10
  query: {
11
11
  type: "string",
12
- description: "Search query with optional natural language hints for quantity ('show 5 tasks', 'the most recent', 'top 5') and depth ('quick search', 'fast search', 'search deep', 'thorough search'). Examples: 'show me 3 pending tasks', 'quick search for recent bugs', 'search deep for authentication issues'",
12
+ description: "Search query with optional natural language hints for quantity ('show 5 tasks', 'the most recent', 'top 5'). Examples: 'show me 3 pending tasks', 'recent bugs', 'authentication issues'",
13
13
  },
14
14
  space_id: {
15
15
  type: "string",
@@ -123,96 +123,35 @@ export const TOOLS = [
123
123
  },
124
124
  add: {
125
125
  type: "object",
126
- description: "Add new context and/or tasks to memory",
126
+ description: "Add new items to memory with automatic intelligent classification and topic suggestion",
127
127
  properties: {
128
- context: {
128
+ items: {
129
129
  type: "array",
130
130
  items: {
131
131
  type: "object",
132
132
  properties: {
133
- title: { type: "string", description: "Context title" },
133
+ title: { type: "string", description: "Item title" },
134
134
  content: {
135
135
  type: "string",
136
- description: "Context content (general information)",
137
- },
138
- topics: {
139
- type: "array",
140
- items: { type: "string" },
141
- description: "Optional topics/tags",
142
- },
143
- },
144
- required: ["title", "content"],
145
- },
146
- description: "Array of context items to add",
147
- },
148
- tasks: {
149
- type: "array",
150
- items: {
151
- type: "object",
152
- properties: {
153
- title: { type: "string", description: "Task title" },
154
- content: { type: "string", description: "Task description" },
155
- topics: {
156
- type: "array",
157
- items: { type: "string" },
158
- description: "Optional topics/tags",
159
- },
160
- status: {
161
- type: "string",
162
- enum: [
163
- "pending",
164
- "in_progress",
165
- "completed",
166
- "invalidated",
167
- ],
168
- description: "Task status (default: pending)",
169
- },
170
- priority: {
171
- type: "string",
172
- enum: ["urgent", "high", "medium", "low"],
173
- description: "Priority level (default: medium)",
136
+ description: "Item content - system automatically classifies as task (actionable) or context (knowledge) and suggests relevant topics",
174
137
  },
175
138
  },
176
139
  required: ["title", "content"],
177
140
  },
178
- description: "Array of tasks to add",
141
+ description: "Array of items to add. System intelligently: (1) classifies as task or context, (2) suggests 1-3 relevant topics based on content and existing topics. Examples: 'Need to fix auth bug' → task with topics like 'authentication', 'bug-fix'. 'Learned React batches updates' → context with topics like 'react', 'learning'.",
179
142
  },
180
143
  },
181
144
  },
182
145
  update: {
183
146
  type: "object",
184
- description: "Update existing context and/or tasks",
147
+ description: "Update existing items (context or tasks) - system detects type from ID prefix",
185
148
  properties: {
186
- context: {
149
+ items: {
187
150
  type: "array",
188
151
  items: {
189
152
  type: "object",
190
153
  properties: {
191
- id: { type: "string", description: "Context ID to update" },
192
- title: {
193
- type: "string",
194
- description: "New title (optional)",
195
- },
196
- content: {
197
- type: "string",
198
- description: "New content (optional)",
199
- },
200
- topics: {
201
- type: "array",
202
- items: { type: "string" },
203
- description: "New topics (optional)",
204
- },
205
- },
206
- required: ["id"],
207
- },
208
- description: "Array of context updates (must include id)",
209
- },
210
- tasks: {
211
- type: "array",
212
- items: {
213
- type: "object",
214
- properties: {
215
- task_id: { type: "string", description: "Task ID to update" },
154
+ id: { type: "string", description: "Item ID to update (mem_* for context, task_* for tasks)" },
216
155
  title: {
217
156
  type: "string",
218
157
  description: "New title (optional)",
@@ -234,33 +173,28 @@ export const TOOLS = [
234
173
  "completed",
235
174
  "invalidated",
236
175
  ],
237
- description: "New status (optional)",
176
+ description: "New status (optional, tasks only)",
238
177
  },
239
178
  priority: {
240
179
  type: "string",
241
180
  enum: ["urgent", "high", "medium", "low"],
242
- description: "New priority (optional)",
181
+ description: "New priority (optional, tasks only)",
243
182
  },
244
183
  },
245
- required: ["task_id"],
184
+ required: ["id"],
246
185
  },
247
- description: "Array of task updates (must include task_id)",
186
+ description: "Array of items to update. Type automatically detected from ID prefix (mem_* = context, task_* = task). For context items, status/priority are ignored.",
248
187
  },
249
188
  },
250
189
  },
251
190
  delete: {
252
191
  type: "object",
253
- description: "Delete context and/or tasks by ID",
192
+ description: "Delete items by ID - system detects type from ID prefix",
254
193
  properties: {
255
- context_ids: {
256
- type: "array",
257
- items: { type: "string" },
258
- description: "Array of context IDs to delete",
259
- },
260
- task_ids: {
194
+ item_ids: {
261
195
  type: "array",
262
196
  items: { type: "string" },
263
- description: "Array of task IDs to delete",
197
+ description: "Array of item IDs to delete (mem_* for context, task_* for tasks). Type automatically detected from ID prefix.",
264
198
  },
265
199
  },
266
200
  },
package/index.ts CHANGED
@@ -60,7 +60,7 @@ async function checkVersion() {
60
60
  versionCheckDone = true;
61
61
 
62
62
  if (latestVersion && latestVersion !== CURRENT_VERSION) {
63
- console.warn("\n⚠️ UPDATE AVAILABLE ⚠️");
63
+ console.warn("\n UPDATE AVAILABLE ");
64
64
  console.warn(`Current version: ${CURRENT_VERSION}`);
65
65
  console.warn(`Latest version: ${latestVersion}`);
66
66
  console.warn("Update with: npx @intangle/mcp-server@latest\n");
@@ -115,11 +115,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
115
115
  }));
116
116
 
117
117
  async function handleSearchMemories(args: any) {
118
- const {
119
- space_id,
120
- query,
121
- topics,
122
- } = args as {
118
+ const { space_id, query, topics } = args as {
123
119
  space_id: string;
124
120
  query: string;
125
121
  topics?: string[];
@@ -140,31 +136,6 @@ async function handleSearchMemories(args: any) {
140
136
  });
141
137
  }
142
138
 
143
- async function handleGetRecentMemories(args: any) {
144
- const {
145
- space_id,
146
- topics,
147
- limit = 20,
148
- } = args as {
149
- space_id?: string;
150
- topics?: string[];
151
- limit?: number;
152
- };
153
-
154
- // Require space_id to be provided
155
- if (!space_id) {
156
- throw new Error(
157
- "space_id is required. Use list_spaces to see available options.",
158
- );
159
- }
160
-
161
- return makeApiCall("get-recent-memories", {
162
- space_id,
163
- topics,
164
- limit,
165
- });
166
- }
167
-
168
139
  async function handleFetch(args: any) {
169
140
  const { id, ids } = args as { id?: string; ids?: string[] };
170
141
 
@@ -211,10 +182,6 @@ async function handleUpdateSpace(args: any) {
211
182
  });
212
183
  }
213
184
 
214
- async function handleListTasks(args: any) {
215
- return makeApiCall("list-tasks", args);
216
- }
217
-
218
185
  server.setRequestHandler(CallToolRequestSchema, async (request: any) => {
219
186
  const { name, arguments: args } = request.params;
220
187
 
@@ -225,9 +192,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request: any) => {
225
192
  case "search":
226
193
  result = await handleSearchMemories(args);
227
194
  break;
228
- case "get_recent_memories":
229
- result = await handleGetRecentMemories(args);
230
- break;
231
195
  case "fetch":
232
196
  result = await handleFetch(args);
233
197
  break;
@@ -246,9 +210,6 @@ server.setRequestHandler(CallToolRequestSchema, async (request: any) => {
246
210
  case "update_space":
247
211
  result = await handleUpdateSpace(args);
248
212
  break;
249
- case "list_tasks":
250
- result = await handleListTasks(args);
251
- break;
252
213
  default:
253
214
  throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`);
254
215
  }
@@ -270,7 +231,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request: any) => {
270
231
 
271
232
  // Add version warning to response if outdated
272
233
  if (latestVersion && latestVersion !== CURRENT_VERSION) {
273
- const warning = `\n\n⚠️ UPDATE AVAILABLE: MCP Server v${latestVersion} is available (you're on v${CURRENT_VERSION}). Update with: npx @intangle/mcp-server@latest`;
234
+ const warning = `\n\n UPDATE AVAILABLE: MCP Server v${latestVersion} is available (you're on v${CURRENT_VERSION}). Update with: npx @intangle/mcp-server@latest`;
274
235
  responseText += warning;
275
236
  }
276
237
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intangle/mcp-server",
3
- "version": "1.2.7",
3
+ "version": "2.0.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",
@@ -4,13 +4,13 @@ export const TOOLS = [
4
4
  name: "search",
5
5
  title: "Search Space",
6
6
  description:
7
- "Search for information within a space. System automatically extracts quantity from natural language ('show 3 tasks' → 3 results, 'the last one' → 1 result), determines optimal depth from query complexity ('quick search' → quick mode, 'search deep' → deep mode), and intelligently formats results (1-3 items → summaries, 4+ items → IDs only). Use fetch tool to get full content for specific IDs when needed.",
7
+ "Search for information within a space. System automatically extracts quantity from natural language ('show 3 tasks' → 3 results, 'the last one' → 1 result) and intelligently formats results (1-3 items → summaries, 4+ items → IDs only). Use fetch tool to get full content for specific IDs when needed.",
8
8
  inputSchema: {
9
9
  type: "object",
10
10
  properties: {
11
11
  query: {
12
12
  type: "string",
13
- description: "Search query with optional natural language hints for quantity ('show 5 tasks', 'the most recent', 'top 5') and depth ('quick search', 'fast search', 'search deep', 'thorough search'). Examples: 'show me 3 pending tasks', 'quick search for recent bugs', 'search deep for authentication issues'",
13
+ description: "Search query with optional natural language hints for quantity ('show 5 tasks', 'the most recent', 'top 5'). Examples: 'show me 3 pending tasks', 'recent bugs', 'authentication issues'",
14
14
  },
15
15
  space_id: {
16
16
  type: "string",
@@ -137,96 +137,35 @@ export const TOOLS = [
137
137
  },
138
138
  add: {
139
139
  type: "object",
140
- description: "Add new context and/or tasks to memory",
140
+ description: "Add new items to memory with automatic intelligent classification and topic suggestion",
141
141
  properties: {
142
- context: {
142
+ items: {
143
143
  type: "array",
144
144
  items: {
145
145
  type: "object",
146
146
  properties: {
147
- title: { type: "string", description: "Context title" },
147
+ title: { type: "string", description: "Item title" },
148
148
  content: {
149
149
  type: "string",
150
- description: "Context content (general information)",
151
- },
152
- topics: {
153
- type: "array",
154
- items: { type: "string" },
155
- description: "Optional topics/tags",
156
- },
157
- },
158
- required: ["title", "content"],
159
- },
160
- description: "Array of context items to add",
161
- },
162
- tasks: {
163
- type: "array",
164
- items: {
165
- type: "object",
166
- properties: {
167
- title: { type: "string", description: "Task title" },
168
- content: { type: "string", description: "Task description" },
169
- topics: {
170
- type: "array",
171
- items: { type: "string" },
172
- description: "Optional topics/tags",
173
- },
174
- status: {
175
- type: "string",
176
- enum: [
177
- "pending",
178
- "in_progress",
179
- "completed",
180
- "invalidated",
181
- ],
182
- description: "Task status (default: pending)",
183
- },
184
- priority: {
185
- type: "string",
186
- enum: ["urgent", "high", "medium", "low"],
187
- description: "Priority level (default: medium)",
150
+ description: "Item content - system automatically classifies as task (actionable) or context (knowledge) and suggests relevant topics",
188
151
  },
189
152
  },
190
153
  required: ["title", "content"],
191
154
  },
192
- description: "Array of tasks to add",
155
+ description: "Array of items to add. System intelligently: (1) classifies as task or context, (2) suggests 1-3 relevant topics based on content and existing topics. Examples: 'Need to fix auth bug' → task with topics like 'authentication', 'bug-fix'. 'Learned React batches updates' → context with topics like 'react', 'learning'.",
193
156
  },
194
157
  },
195
158
  },
196
159
  update: {
197
160
  type: "object",
198
- description: "Update existing context and/or tasks",
161
+ description: "Update existing items (context or tasks) - system detects type from ID prefix",
199
162
  properties: {
200
- context: {
163
+ items: {
201
164
  type: "array",
202
165
  items: {
203
166
  type: "object",
204
167
  properties: {
205
- id: { type: "string", description: "Context ID to update" },
206
- title: {
207
- type: "string",
208
- description: "New title (optional)",
209
- },
210
- content: {
211
- type: "string",
212
- description: "New content (optional)",
213
- },
214
- topics: {
215
- type: "array",
216
- items: { type: "string" },
217
- description: "New topics (optional)",
218
- },
219
- },
220
- required: ["id"],
221
- },
222
- description: "Array of context updates (must include id)",
223
- },
224
- tasks: {
225
- type: "array",
226
- items: {
227
- type: "object",
228
- properties: {
229
- task_id: { type: "string", description: "Task ID to update" },
168
+ id: { type: "string", description: "Item ID to update (mem_* for context, task_* for tasks)" },
230
169
  title: {
231
170
  type: "string",
232
171
  description: "New title (optional)",
@@ -248,33 +187,28 @@ export const TOOLS = [
248
187
  "completed",
249
188
  "invalidated",
250
189
  ],
251
- description: "New status (optional)",
190
+ description: "New status (optional, tasks only)",
252
191
  },
253
192
  priority: {
254
193
  type: "string",
255
194
  enum: ["urgent", "high", "medium", "low"],
256
- description: "New priority (optional)",
195
+ description: "New priority (optional, tasks only)",
257
196
  },
258
197
  },
259
- required: ["task_id"],
198
+ required: ["id"],
260
199
  },
261
- description: "Array of task updates (must include task_id)",
200
+ description: "Array of items to update. Type automatically detected from ID prefix (mem_* = context, task_* = task). For context items, status/priority are ignored.",
262
201
  },
263
202
  },
264
203
  },
265
204
  delete: {
266
205
  type: "object",
267
- description: "Delete context and/or tasks by ID",
206
+ description: "Delete items by ID - system detects type from ID prefix",
268
207
  properties: {
269
- context_ids: {
270
- type: "array",
271
- items: { type: "string" },
272
- description: "Array of context IDs to delete",
273
- },
274
- task_ids: {
208
+ item_ids: {
275
209
  type: "array",
276
210
  items: { type: "string" },
277
- description: "Array of task IDs to delete",
211
+ description: "Array of item IDs to delete (mem_* for context, task_* for tasks). Type automatically detected from ID prefix.",
278
212
  },
279
213
  },
280
214
  },
Binary file