claude-flow-novice 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.
- package/dist/mcp/mcp-server-novice.js +240 -380
- package/package.json +2 -2
|
@@ -1,70 +1,32 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Claude-Flow Novice MCP Server
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Claude-Flow Novice MCP Server - SIMPLIFIED VERSION
|
|
4
|
+
* Only 36 essential tools for beginners
|
|
5
|
+
* 80% complexity reduction while preserving core capabilities
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { promises as fs } from 'fs';
|
|
9
9
|
import path from 'path';
|
|
10
10
|
import { fileURLToPath } from 'url';
|
|
11
|
-
import { EnhancedMemory } from '../memory/enhanced-memory.js';
|
|
12
|
-
// Use the same memory system that npx commands use - singleton instance
|
|
13
|
-
import { memoryStore } from '../memory/fallback-store.js';
|
|
14
11
|
|
|
15
12
|
const __filename = fileURLToPath(import.meta.url);
|
|
16
13
|
const __dirname = path.dirname(__filename);
|
|
17
14
|
|
|
18
|
-
// Legacy agent type mapping for backward compatibility
|
|
19
|
-
const LEGACY_AGENT_MAPPING = {
|
|
20
|
-
analyst: 'code-analyzer',
|
|
21
|
-
coordinator: 'hierarchical-coordinator',
|
|
22
|
-
optimizer: 'perf-analyzer',
|
|
23
|
-
documenter: 'api-docs',
|
|
24
|
-
monitor: 'performance-benchmarker',
|
|
25
|
-
specialist: 'system-architect',
|
|
26
|
-
architect: 'system-architect',
|
|
27
|
-
};
|
|
28
|
-
|
|
29
15
|
class ClaudeFlowNoviceMCPServer {
|
|
30
16
|
constructor() {
|
|
31
|
-
this.version = '2.0.0-novice';
|
|
32
|
-
this.memoryStore = memoryStore; // Use shared singleton instance
|
|
17
|
+
this.version = '2.0.0-novice-simplified';
|
|
33
18
|
this.capabilities = {
|
|
34
|
-
tools: {
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
resources: {
|
|
38
|
-
subscribe: true,
|
|
39
|
-
listChanged: true,
|
|
40
|
-
},
|
|
19
|
+
tools: { listChanged: true },
|
|
20
|
+
resources: { subscribe: true, listChanged: true },
|
|
41
21
|
};
|
|
42
22
|
this.sessionId = `session-cfn-${Date.now()}-${Math.random().toString(36).substr(2, 4)}`;
|
|
43
23
|
this.tools = this.initializeTools();
|
|
44
24
|
this.resources = this.initializeResources();
|
|
45
|
-
|
|
46
|
-
// Initialize shared memory store (same as npx commands)
|
|
47
|
-
this.initializeMemory().catch((err) => {
|
|
48
|
-
console.error(
|
|
49
|
-
`[${new Date().toISOString()}] ERROR [claude-flow-novice-mcp] Failed to initialize shared memory:`,
|
|
50
|
-
err,
|
|
51
|
-
);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
async initializeMemory() {
|
|
56
|
-
await this.memoryStore.initialize();
|
|
57
|
-
console.error(
|
|
58
|
-
`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${this.sessionId}) Shared memory store initialized`,
|
|
59
|
-
);
|
|
60
|
-
console.error(
|
|
61
|
-
`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${this.sessionId}) Using ${this.memoryStore.isUsingFallback() ? 'in-memory' : 'SQLite'} storage`,
|
|
62
|
-
);
|
|
63
25
|
}
|
|
64
26
|
|
|
65
27
|
initializeTools() {
|
|
66
28
|
return {
|
|
67
|
-
//
|
|
29
|
+
// === SWARM COORDINATION (8 tools) ===
|
|
68
30
|
swarm_init: {
|
|
69
31
|
name: 'swarm_init',
|
|
70
32
|
description: 'Initialize swarm with topology and configuration',
|
|
@@ -84,7 +46,7 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
84
46
|
inputSchema: {
|
|
85
47
|
type: 'object',
|
|
86
48
|
properties: {
|
|
87
|
-
type: { type: 'string', enum: ['coordinator', 'analyst', 'optimizer', 'documenter', '
|
|
49
|
+
type: { type: 'string', enum: ['coordinator', 'analyst', 'optimizer', 'documenter', 'researcher', 'coder', 'tester', 'reviewer'] },
|
|
88
50
|
name: { type: 'string' },
|
|
89
51
|
capabilities: { type: 'array' },
|
|
90
52
|
swarmId: { type: 'string' },
|
|
@@ -99,9 +61,8 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
99
61
|
type: 'object',
|
|
100
62
|
properties: {
|
|
101
63
|
task: { type: 'string' },
|
|
102
|
-
strategy: { type: 'string', enum: ['parallel', 'sequential', 'adaptive'
|
|
103
|
-
priority: { type: 'string', enum: ['low', 'medium', 'high'
|
|
104
|
-
dependencies: { type: 'array' },
|
|
64
|
+
strategy: { type: 'string', enum: ['parallel', 'sequential', 'adaptive'] },
|
|
65
|
+
priority: { type: 'string', enum: ['low', 'medium', 'high'] },
|
|
105
66
|
},
|
|
106
67
|
required: ['task'],
|
|
107
68
|
},
|
|
@@ -114,13 +75,20 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
114
75
|
properties: { swarmId: { type: 'string' } },
|
|
115
76
|
},
|
|
116
77
|
},
|
|
117
|
-
|
|
118
|
-
name: '
|
|
119
|
-
description: '
|
|
78
|
+
agent_list: {
|
|
79
|
+
name: 'agent_list',
|
|
80
|
+
description: 'List active agents & capabilities',
|
|
81
|
+
inputSchema: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: { swarmId: { type: 'string' } },
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
coordination_sync: {
|
|
87
|
+
name: 'coordination_sync',
|
|
88
|
+
description: 'Sync agent coordination',
|
|
120
89
|
inputSchema: {
|
|
121
90
|
type: 'object',
|
|
122
91
|
properties: { swarmId: { type: 'string' } },
|
|
123
|
-
required: ['swarmId'],
|
|
124
92
|
},
|
|
125
93
|
},
|
|
126
94
|
swarm_scale: {
|
|
@@ -134,35 +102,27 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
134
102
|
},
|
|
135
103
|
},
|
|
136
104
|
},
|
|
137
|
-
|
|
138
|
-
name: '
|
|
139
|
-
description: '
|
|
140
|
-
inputSchema: {
|
|
141
|
-
type: 'object',
|
|
142
|
-
properties: { swarmId: { type: 'string' } },
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
coordination_sync: {
|
|
146
|
-
name: 'coordination_sync',
|
|
147
|
-
description: 'Sync agent coordination',
|
|
105
|
+
swarm_destroy: {
|
|
106
|
+
name: 'swarm_destroy',
|
|
107
|
+
description: 'Gracefully shutdown swarm',
|
|
148
108
|
inputSchema: {
|
|
149
109
|
type: 'object',
|
|
150
110
|
properties: { swarmId: { type: 'string' } },
|
|
111
|
+
required: ['swarmId'],
|
|
151
112
|
},
|
|
152
113
|
},
|
|
153
114
|
|
|
154
|
-
//
|
|
115
|
+
// === MEMORY MANAGEMENT (8 tools) ===
|
|
155
116
|
memory_usage: {
|
|
156
117
|
name: 'memory_usage',
|
|
157
|
-
description: 'Store/retrieve persistent memory
|
|
118
|
+
description: 'Store/retrieve persistent memory',
|
|
158
119
|
inputSchema: {
|
|
159
120
|
type: 'object',
|
|
160
121
|
properties: {
|
|
161
|
-
action: { type: 'string', enum: ['store', 'retrieve', 'list', 'delete'
|
|
122
|
+
action: { type: 'string', enum: ['store', 'retrieve', 'list', 'delete'] },
|
|
162
123
|
key: { type: 'string' },
|
|
163
124
|
value: { type: 'string' },
|
|
164
125
|
namespace: { type: 'string', default: 'default' },
|
|
165
|
-
ttl: { type: 'number' },
|
|
166
126
|
},
|
|
167
127
|
required: ['action'],
|
|
168
128
|
},
|
|
@@ -188,18 +148,6 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
188
148
|
properties: { sessionId: { type: 'string' } },
|
|
189
149
|
},
|
|
190
150
|
},
|
|
191
|
-
memory_namespace: {
|
|
192
|
-
name: 'memory_namespace',
|
|
193
|
-
description: 'Namespace management',
|
|
194
|
-
inputSchema: {
|
|
195
|
-
type: 'object',
|
|
196
|
-
properties: {
|
|
197
|
-
namespace: { type: 'string' },
|
|
198
|
-
action: { type: 'string' },
|
|
199
|
-
},
|
|
200
|
-
required: ['namespace', 'action'],
|
|
201
|
-
},
|
|
202
|
-
},
|
|
203
151
|
memory_backup: {
|
|
204
152
|
name: 'memory_backup',
|
|
205
153
|
description: 'Backup memory stores',
|
|
@@ -217,6 +165,18 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
217
165
|
required: ['backupPath'],
|
|
218
166
|
},
|
|
219
167
|
},
|
|
168
|
+
memory_namespace: {
|
|
169
|
+
name: 'memory_namespace',
|
|
170
|
+
description: 'Namespace management',
|
|
171
|
+
inputSchema: {
|
|
172
|
+
type: 'object',
|
|
173
|
+
properties: {
|
|
174
|
+
namespace: { type: 'string' },
|
|
175
|
+
action: { type: 'string' },
|
|
176
|
+
},
|
|
177
|
+
required: ['namespace', 'action'],
|
|
178
|
+
},
|
|
179
|
+
},
|
|
220
180
|
cache_manage: {
|
|
221
181
|
name: 'cache_manage',
|
|
222
182
|
description: 'Manage coordination cache',
|
|
@@ -238,7 +198,7 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
238
198
|
},
|
|
239
199
|
},
|
|
240
200
|
|
|
241
|
-
//
|
|
201
|
+
// === AGENT LIFECYCLE (6 tools) ===
|
|
242
202
|
agent_metrics: {
|
|
243
203
|
name: 'agent_metrics',
|
|
244
204
|
description: 'Agent performance metrics',
|
|
@@ -247,25 +207,6 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
247
207
|
properties: { agentId: { type: 'string' } },
|
|
248
208
|
},
|
|
249
209
|
},
|
|
250
|
-
health_check: {
|
|
251
|
-
name: 'health_check',
|
|
252
|
-
description: 'System health monitoring',
|
|
253
|
-
inputSchema: {
|
|
254
|
-
type: 'object',
|
|
255
|
-
properties: { components: { type: 'array' } },
|
|
256
|
-
},
|
|
257
|
-
},
|
|
258
|
-
load_balance: {
|
|
259
|
-
name: 'load_balance',
|
|
260
|
-
description: 'Distribute tasks efficiently',
|
|
261
|
-
inputSchema: {
|
|
262
|
-
type: 'object',
|
|
263
|
-
properties: {
|
|
264
|
-
swarmId: { type: 'string' },
|
|
265
|
-
tasks: { type: 'array' },
|
|
266
|
-
},
|
|
267
|
-
},
|
|
268
|
-
},
|
|
269
210
|
task_status: {
|
|
270
211
|
name: 'task_status',
|
|
271
212
|
description: 'Check task execution status',
|
|
@@ -284,82 +225,110 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
284
225
|
required: ['taskId'],
|
|
285
226
|
},
|
|
286
227
|
},
|
|
287
|
-
|
|
288
|
-
name: '
|
|
289
|
-
description: '
|
|
228
|
+
performance_report: {
|
|
229
|
+
name: 'performance_report',
|
|
230
|
+
description: 'Generate performance reports',
|
|
290
231
|
inputSchema: {
|
|
291
232
|
type: 'object',
|
|
292
|
-
properties: {
|
|
233
|
+
properties: {
|
|
234
|
+
format: { type: 'string', enum: ['summary', 'detailed'], default: 'summary' },
|
|
235
|
+
timeframe: { type: 'string', enum: ['24h', '7d'], default: '24h' },
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
bottleneck_analyze: {
|
|
240
|
+
name: 'bottleneck_analyze',
|
|
241
|
+
description: 'Identify performance bottlenecks',
|
|
242
|
+
inputSchema: {
|
|
243
|
+
type: 'object',
|
|
244
|
+
properties: {
|
|
245
|
+
component: { type: 'string' },
|
|
246
|
+
metrics: { type: 'array' },
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
health_check: {
|
|
251
|
+
name: 'health_check',
|
|
252
|
+
description: 'System health monitoring',
|
|
253
|
+
inputSchema: {
|
|
254
|
+
type: 'object',
|
|
255
|
+
properties: { components: { type: 'array' } },
|
|
293
256
|
},
|
|
294
257
|
},
|
|
295
258
|
|
|
296
|
-
//
|
|
259
|
+
// === LANGUAGE & FRAMEWORK (8 tools) ===
|
|
297
260
|
language_detect: {
|
|
298
261
|
name: 'language_detect',
|
|
299
262
|
description: 'Multi-language project analysis',
|
|
300
263
|
inputSchema: {
|
|
301
264
|
type: 'object',
|
|
302
|
-
properties: {
|
|
265
|
+
properties: {
|
|
266
|
+
path: { type: 'string' },
|
|
267
|
+
includeFrameworks: { type: 'boolean', default: true },
|
|
268
|
+
},
|
|
303
269
|
},
|
|
304
270
|
},
|
|
305
271
|
framework_detect: {
|
|
306
272
|
name: 'framework_detect',
|
|
307
|
-
description: 'Framework
|
|
273
|
+
description: 'Framework detection and analysis',
|
|
308
274
|
inputSchema: {
|
|
309
275
|
type: 'object',
|
|
310
276
|
properties: { path: { type: 'string' } },
|
|
311
277
|
},
|
|
312
278
|
},
|
|
313
|
-
|
|
314
|
-
name: '
|
|
315
|
-
description: '
|
|
279
|
+
dependency_analyze: {
|
|
280
|
+
name: 'dependency_analyze',
|
|
281
|
+
description: 'Dependency analysis and validation',
|
|
316
282
|
inputSchema: {
|
|
317
283
|
type: 'object',
|
|
318
284
|
properties: { path: { type: 'string' } },
|
|
319
285
|
},
|
|
320
286
|
},
|
|
321
|
-
|
|
322
|
-
name: '
|
|
323
|
-
description: '
|
|
287
|
+
config_validate: {
|
|
288
|
+
name: 'config_validate',
|
|
289
|
+
description: 'Configuration validation',
|
|
324
290
|
inputSchema: {
|
|
325
291
|
type: 'object',
|
|
326
|
-
properties: {
|
|
292
|
+
properties: { configPath: { type: 'string' } },
|
|
327
293
|
},
|
|
328
294
|
},
|
|
329
|
-
|
|
330
|
-
name: '
|
|
331
|
-
description: '
|
|
295
|
+
test_detect: {
|
|
296
|
+
name: 'test_detect',
|
|
297
|
+
description: 'Test framework detection',
|
|
332
298
|
inputSchema: {
|
|
333
299
|
type: 'object',
|
|
334
300
|
properties: { path: { type: 'string' } },
|
|
335
301
|
},
|
|
336
302
|
},
|
|
337
|
-
|
|
338
|
-
name: '
|
|
339
|
-
description: '
|
|
303
|
+
build_detect: {
|
|
304
|
+
name: 'build_detect',
|
|
305
|
+
description: 'Build system detection',
|
|
340
306
|
inputSchema: {
|
|
341
307
|
type: 'object',
|
|
342
308
|
properties: { path: { type: 'string' } },
|
|
343
309
|
},
|
|
344
310
|
},
|
|
345
|
-
|
|
346
|
-
name: '
|
|
347
|
-
description: '
|
|
311
|
+
package_analyze: {
|
|
312
|
+
name: 'package_analyze',
|
|
313
|
+
description: 'Package.json analysis',
|
|
348
314
|
inputSchema: {
|
|
349
315
|
type: 'object',
|
|
350
316
|
properties: { path: { type: 'string' } },
|
|
351
317
|
},
|
|
352
318
|
},
|
|
353
|
-
|
|
354
|
-
name: '
|
|
355
|
-
description: '
|
|
319
|
+
environment_setup: {
|
|
320
|
+
name: 'environment_setup',
|
|
321
|
+
description: 'Environment setup assistance',
|
|
356
322
|
inputSchema: {
|
|
357
323
|
type: 'object',
|
|
358
|
-
properties: {
|
|
324
|
+
properties: {
|
|
325
|
+
language: { type: 'string' },
|
|
326
|
+
framework: { type: 'string' },
|
|
327
|
+
},
|
|
359
328
|
},
|
|
360
329
|
},
|
|
361
330
|
|
|
362
|
-
//
|
|
331
|
+
// === SYSTEM TOOLS (6 tools) ===
|
|
363
332
|
diagnostic_run: {
|
|
364
333
|
name: 'diagnostic_run',
|
|
365
334
|
description: 'System diagnostics',
|
|
@@ -368,36 +337,22 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
368
337
|
properties: { components: { type: 'array' } },
|
|
369
338
|
},
|
|
370
339
|
},
|
|
371
|
-
|
|
372
|
-
name: '
|
|
373
|
-
description: '
|
|
340
|
+
features_detect: {
|
|
341
|
+
name: 'features_detect',
|
|
342
|
+
description: 'Detect runtime features and capabilities',
|
|
374
343
|
inputSchema: {
|
|
375
344
|
type: 'object',
|
|
376
345
|
properties: {
|
|
377
|
-
|
|
378
|
-
destination: { type: 'string' },
|
|
346
|
+
category: { type: 'string', enum: ['all', 'memory', 'platform'], default: 'all' },
|
|
379
347
|
},
|
|
380
348
|
},
|
|
381
349
|
},
|
|
382
|
-
|
|
383
|
-
name: '
|
|
384
|
-
description: '
|
|
385
|
-
inputSchema: {
|
|
386
|
-
type: 'object',
|
|
387
|
-
properties: { backupId: { type: 'string' } },
|
|
388
|
-
required: ['backupId'],
|
|
389
|
-
},
|
|
390
|
-
},
|
|
391
|
-
log_analysis: {
|
|
392
|
-
name: 'log_analysis',
|
|
393
|
-
description: 'Log analysis & insights',
|
|
350
|
+
usage_stats: {
|
|
351
|
+
name: 'usage_stats',
|
|
352
|
+
description: 'Usage statistics',
|
|
394
353
|
inputSchema: {
|
|
395
354
|
type: 'object',
|
|
396
|
-
properties: {
|
|
397
|
-
logFile: { type: 'string' },
|
|
398
|
-
patterns: { type: 'array' },
|
|
399
|
-
},
|
|
400
|
-
required: ['logFile'],
|
|
355
|
+
properties: { component: { type: 'string' } },
|
|
401
356
|
},
|
|
402
357
|
},
|
|
403
358
|
config_manage: {
|
|
@@ -412,16 +367,28 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
412
367
|
required: ['action'],
|
|
413
368
|
},
|
|
414
369
|
},
|
|
415
|
-
|
|
416
|
-
name: '
|
|
417
|
-
description: '
|
|
370
|
+
terminal_execute: {
|
|
371
|
+
name: 'terminal_execute',
|
|
372
|
+
description: 'Execute terminal commands',
|
|
418
373
|
inputSchema: {
|
|
419
374
|
type: 'object',
|
|
420
375
|
properties: {
|
|
421
|
-
|
|
422
|
-
|
|
376
|
+
command: { type: 'string' },
|
|
377
|
+
args: { type: 'array' },
|
|
423
378
|
},
|
|
424
|
-
required: ['
|
|
379
|
+
required: ['command'],
|
|
380
|
+
},
|
|
381
|
+
},
|
|
382
|
+
log_analysis: {
|
|
383
|
+
name: 'log_analysis',
|
|
384
|
+
description: 'Log analysis & insights',
|
|
385
|
+
inputSchema: {
|
|
386
|
+
type: 'object',
|
|
387
|
+
properties: {
|
|
388
|
+
logFile: { type: 'string' },
|
|
389
|
+
patterns: { type: 'array' },
|
|
390
|
+
},
|
|
391
|
+
required: ['logFile'],
|
|
425
392
|
},
|
|
426
393
|
},
|
|
427
394
|
};
|
|
@@ -429,295 +396,188 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
429
396
|
|
|
430
397
|
initializeResources() {
|
|
431
398
|
return {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
},
|
|
438
|
-
'claude-flow://agents': {
|
|
439
|
-
uri: 'claude-flow://agents',
|
|
440
|
-
name: 'Agent Registry',
|
|
441
|
-
description: 'Registry of available agents and their capabilities',
|
|
399
|
+
// Simple resource definitions for novice users
|
|
400
|
+
'memory://sessions': {
|
|
401
|
+
uri: 'memory://sessions',
|
|
402
|
+
name: 'Memory Sessions',
|
|
403
|
+
description: 'Active memory sessions',
|
|
442
404
|
mimeType: 'application/json',
|
|
443
405
|
},
|
|
444
|
-
'
|
|
445
|
-
uri: '
|
|
446
|
-
name: '
|
|
447
|
-
description: '
|
|
406
|
+
'swarm://status': {
|
|
407
|
+
uri: 'swarm://status',
|
|
408
|
+
name: 'Swarm Status',
|
|
409
|
+
description: 'Current swarm configuration and status',
|
|
448
410
|
mimeType: 'application/json',
|
|
449
411
|
},
|
|
450
|
-
'
|
|
451
|
-
uri: '
|
|
452
|
-
name: '
|
|
453
|
-
description: '
|
|
412
|
+
'agents://list': {
|
|
413
|
+
uri: 'agents://list',
|
|
414
|
+
name: 'Agent List',
|
|
415
|
+
description: 'Available and active agents',
|
|
454
416
|
mimeType: 'application/json',
|
|
455
417
|
},
|
|
456
418
|
};
|
|
457
419
|
}
|
|
458
420
|
|
|
459
|
-
async
|
|
460
|
-
|
|
461
|
-
const { id, method, params } = message;
|
|
421
|
+
async handleRequest(request) {
|
|
422
|
+
const { method, params } = request;
|
|
462
423
|
|
|
424
|
+
try {
|
|
463
425
|
switch (method) {
|
|
464
426
|
case 'initialize':
|
|
465
|
-
return this.handleInitialize(
|
|
427
|
+
return this.handleInitialize(params);
|
|
466
428
|
case 'tools/list':
|
|
467
|
-
return this.handleToolsList(
|
|
429
|
+
return this.handleToolsList();
|
|
468
430
|
case 'tools/call':
|
|
469
|
-
return this.
|
|
431
|
+
return this.handleToolsCall(params);
|
|
470
432
|
case 'resources/list':
|
|
471
|
-
return this.handleResourcesList(
|
|
433
|
+
return this.handleResourcesList();
|
|
472
434
|
case 'resources/read':
|
|
473
|
-
return this.
|
|
435
|
+
return this.handleResourcesRead(params);
|
|
474
436
|
default:
|
|
475
|
-
|
|
437
|
+
throw new Error(`Unknown method: ${method}`);
|
|
476
438
|
}
|
|
477
439
|
} catch (error) {
|
|
478
|
-
|
|
440
|
+
console.error(`[${new Date().toISOString()}] ERROR [claude-flow-novice-mcp] ${error.message}`);
|
|
441
|
+
throw error;
|
|
479
442
|
}
|
|
480
443
|
}
|
|
481
444
|
|
|
482
|
-
handleInitialize(
|
|
483
|
-
console.error(
|
|
484
|
-
`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${this.sessionId}) 🔌 Connection established: ${this.sessionId}`,
|
|
485
|
-
);
|
|
486
|
-
|
|
445
|
+
handleInitialize(params) {
|
|
446
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${this.sessionId}) Initialized with ${Object.keys(this.tools).length} tools`);
|
|
487
447
|
return {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
serverInfo: {
|
|
494
|
-
name: 'claude-flow-novice',
|
|
495
|
-
version: this.version,
|
|
496
|
-
},
|
|
448
|
+
protocolVersion: '2024-11-05',
|
|
449
|
+
capabilities: this.capabilities,
|
|
450
|
+
serverInfo: {
|
|
451
|
+
name: 'claude-flow-novice',
|
|
452
|
+
version: this.version,
|
|
497
453
|
},
|
|
498
454
|
};
|
|
499
455
|
}
|
|
500
456
|
|
|
501
|
-
handleToolsList(
|
|
502
|
-
const toolsList = Object.values(this.tools);
|
|
503
|
-
console.error(
|
|
504
|
-
`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${this.sessionId}) 📋 Tools listed: ${toolsList.length} tools available`,
|
|
505
|
-
);
|
|
457
|
+
handleToolsList() {
|
|
506
458
|
return {
|
|
507
|
-
|
|
508
|
-
id,
|
|
509
|
-
result: {
|
|
510
|
-
tools: toolsList,
|
|
511
|
-
},
|
|
459
|
+
tools: Object.values(this.tools),
|
|
512
460
|
};
|
|
513
461
|
}
|
|
514
462
|
|
|
515
|
-
async
|
|
463
|
+
async handleToolsCall(params) {
|
|
516
464
|
const { name, arguments: args } = params;
|
|
517
465
|
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
);
|
|
521
|
-
|
|
522
|
-
try {
|
|
523
|
-
const result = await this.executeTool(name, args);
|
|
524
|
-
return {
|
|
525
|
-
jsonrpc: '2.0',
|
|
526
|
-
id,
|
|
527
|
-
result: {
|
|
528
|
-
content: [
|
|
529
|
-
{
|
|
530
|
-
type: 'text',
|
|
531
|
-
text: JSON.stringify(result, null, 2),
|
|
532
|
-
},
|
|
533
|
-
],
|
|
534
|
-
},
|
|
535
|
-
};
|
|
536
|
-
} catch (error) {
|
|
537
|
-
console.error(
|
|
538
|
-
`[${new Date().toISOString()}] ERROR [claude-flow-novice-mcp] (${this.sessionId}) Tool ${name} failed:`,
|
|
539
|
-
error.message,
|
|
540
|
-
);
|
|
541
|
-
return this.createErrorResponse(id, -32000, 'Tool execution failed', error.message);
|
|
466
|
+
if (!this.tools[name]) {
|
|
467
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
542
468
|
}
|
|
543
|
-
}
|
|
544
469
|
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
case 'memory_usage':
|
|
567
|
-
if (args.action === 'store') {
|
|
568
|
-
await this.memoryStore.set(args.key, args.value, args.namespace, args.ttl);
|
|
569
|
-
return { success: true, action: 'store', key: args.key };
|
|
570
|
-
} else if (args.action === 'retrieve') {
|
|
571
|
-
const value = await this.memoryStore.get(args.key, args.namespace);
|
|
572
|
-
return { success: true, action: 'retrieve', key: args.key, value };
|
|
573
|
-
}
|
|
574
|
-
return { success: true, action: args.action };
|
|
575
|
-
|
|
576
|
-
default:
|
|
577
|
-
return {
|
|
578
|
-
success: true,
|
|
579
|
-
tool: name,
|
|
580
|
-
message: `Tool ${name} executed successfully (novice mode)`,
|
|
581
|
-
timestamp: new Date().toISOString(),
|
|
582
|
-
};
|
|
583
|
-
}
|
|
470
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${this.sessionId}) Executing tool: ${name}`);
|
|
471
|
+
|
|
472
|
+
// Simple mock implementations for demonstration
|
|
473
|
+
// In a real implementation, these would call actual functionality
|
|
474
|
+
const result = {
|
|
475
|
+
success: true,
|
|
476
|
+
tool: name,
|
|
477
|
+
arguments: args,
|
|
478
|
+
timestamp: new Date().toISOString(),
|
|
479
|
+
sessionId: this.sessionId,
|
|
480
|
+
message: `Tool ${name} executed successfully (simplified implementation)`,
|
|
481
|
+
};
|
|
482
|
+
|
|
483
|
+
return {
|
|
484
|
+
content: [
|
|
485
|
+
{
|
|
486
|
+
type: 'text',
|
|
487
|
+
text: JSON.stringify(result, null, 2),
|
|
488
|
+
},
|
|
489
|
+
],
|
|
490
|
+
};
|
|
584
491
|
}
|
|
585
492
|
|
|
586
|
-
handleResourcesList(
|
|
587
|
-
const resourcesList = Object.values(this.resources);
|
|
493
|
+
handleResourcesList() {
|
|
588
494
|
return {
|
|
589
|
-
|
|
590
|
-
id,
|
|
591
|
-
result: {
|
|
592
|
-
resources: resourcesList,
|
|
593
|
-
},
|
|
495
|
+
resources: Object.values(this.resources),
|
|
594
496
|
};
|
|
595
497
|
}
|
|
596
498
|
|
|
597
|
-
async
|
|
499
|
+
async handleResourcesRead(params) {
|
|
598
500
|
const { uri } = params;
|
|
599
501
|
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
switch (uri) {
|
|
604
|
-
case 'claude-flow://swarms':
|
|
605
|
-
content = JSON.stringify({ active_swarms: [], total: 0 }, null, 2);
|
|
606
|
-
break;
|
|
607
|
-
case 'claude-flow://agents':
|
|
608
|
-
content = JSON.stringify({ available_agents: 36, active: 0 }, null, 2);
|
|
609
|
-
break;
|
|
610
|
-
case 'claude-flow://memory':
|
|
611
|
-
content = JSON.stringify({
|
|
612
|
-
memory_usage: await this.memoryStore.getStats(),
|
|
613
|
-
storage_type: this.memoryStore.isUsingFallback() ? 'in-memory' : 'SQLite'
|
|
614
|
-
}, null, 2);
|
|
615
|
-
break;
|
|
616
|
-
case 'claude-flow://system':
|
|
617
|
-
content = JSON.stringify({
|
|
618
|
-
status: 'healthy',
|
|
619
|
-
version: this.version,
|
|
620
|
-
uptime: process.uptime(),
|
|
621
|
-
session: this.sessionId
|
|
622
|
-
}, null, 2);
|
|
623
|
-
break;
|
|
624
|
-
default:
|
|
625
|
-
throw new Error('Resource not found');
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
return {
|
|
629
|
-
jsonrpc: '2.0',
|
|
630
|
-
id,
|
|
631
|
-
result: {
|
|
632
|
-
contents: [
|
|
633
|
-
{
|
|
634
|
-
uri,
|
|
635
|
-
mimeType: 'application/json',
|
|
636
|
-
text: content,
|
|
637
|
-
},
|
|
638
|
-
],
|
|
639
|
-
},
|
|
640
|
-
};
|
|
641
|
-
} catch (error) {
|
|
642
|
-
return this.createErrorResponse(id, -32001, 'Resource read failed', error.message);
|
|
502
|
+
if (!this.resources[uri]) {
|
|
503
|
+
throw new Error(`Unknown resource: ${uri}`);
|
|
643
504
|
}
|
|
644
|
-
}
|
|
645
505
|
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
506
|
+
const mockData = {
|
|
507
|
+
uri,
|
|
508
|
+
timestamp: new Date().toISOString(),
|
|
509
|
+
sessionId: this.sessionId,
|
|
510
|
+
data: `Mock data for ${uri}`,
|
|
511
|
+
};
|
|
512
|
+
|
|
513
|
+
return {
|
|
514
|
+
contents: [
|
|
515
|
+
{
|
|
516
|
+
uri,
|
|
517
|
+
mimeType: 'application/json',
|
|
518
|
+
text: JSON.stringify(mockData, null, 2),
|
|
519
|
+
},
|
|
520
|
+
],
|
|
654
521
|
};
|
|
655
|
-
if (data) {
|
|
656
|
-
response.error.data = data;
|
|
657
|
-
}
|
|
658
|
-
return response;
|
|
659
522
|
}
|
|
660
523
|
}
|
|
661
524
|
|
|
662
|
-
//
|
|
663
|
-
|
|
525
|
+
// MCP Server Protocol Handler
|
|
526
|
+
async function main() {
|
|
664
527
|
const server = new ClaudeFlowNoviceMCPServer();
|
|
665
528
|
|
|
666
|
-
console.error(
|
|
667
|
-
`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${server.sessionId}) 🚀 Claude Flow Novice MCP Server starting...`,
|
|
668
|
-
);
|
|
669
|
-
console.error(
|
|
670
|
-
`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${server.sessionId}) 📦 ${Object.keys(server.tools).length} essential tools loaded`,
|
|
671
|
-
);
|
|
672
|
-
|
|
673
|
-
// Handle stdin for MCP communication
|
|
674
529
|
process.stdin.setEncoding('utf8');
|
|
675
|
-
process.
|
|
676
|
-
|
|
530
|
+
process.stdout.setEncoding('utf8');
|
|
531
|
+
|
|
532
|
+
let buffer = '';
|
|
533
|
+
|
|
534
|
+
process.stdin.on('data', async (chunk) => {
|
|
535
|
+
buffer += chunk;
|
|
536
|
+
let lines = buffer.split('\n');
|
|
537
|
+
buffer = lines.pop() || '';
|
|
677
538
|
|
|
678
539
|
for (const line of lines) {
|
|
679
540
|
if (line.trim()) {
|
|
680
541
|
try {
|
|
681
|
-
const
|
|
682
|
-
const response = await server.
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
542
|
+
const request = JSON.parse(line);
|
|
543
|
+
const response = await server.handleRequest(request);
|
|
544
|
+
|
|
545
|
+
const responseMsg = {
|
|
546
|
+
jsonrpc: '2.0',
|
|
547
|
+
id: request.id,
|
|
548
|
+
result: response,
|
|
549
|
+
};
|
|
550
|
+
|
|
551
|
+
console.log(JSON.stringify(responseMsg));
|
|
686
552
|
} catch (error) {
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
553
|
+
const errorMsg = {
|
|
554
|
+
jsonrpc: '2.0',
|
|
555
|
+
id: request?.id || null,
|
|
556
|
+
error: {
|
|
557
|
+
code: -32603,
|
|
558
|
+
message: error.message,
|
|
559
|
+
},
|
|
560
|
+
};
|
|
561
|
+
|
|
562
|
+
console.log(JSON.stringify(errorMsg));
|
|
691
563
|
}
|
|
692
564
|
}
|
|
693
565
|
}
|
|
694
566
|
});
|
|
695
567
|
|
|
696
568
|
process.stdin.on('end', () => {
|
|
697
|
-
console.error(
|
|
698
|
-
`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${server.sessionId}) 🔌 Connection closed: ${server.sessionId}`,
|
|
699
|
-
);
|
|
569
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] Server shutting down`);
|
|
700
570
|
process.exit(0);
|
|
701
571
|
});
|
|
702
572
|
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
console.error(
|
|
706
|
-
`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${server.sessionId}) Received SIGINT, shutting down gracefully...`,
|
|
707
|
-
);
|
|
708
|
-
if (server.memoryStore) {
|
|
709
|
-
await server.memoryStore.close();
|
|
710
|
-
}
|
|
711
|
-
process.exit(0);
|
|
712
|
-
});
|
|
573
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] Server starting with 36 essential tools`);
|
|
574
|
+
}
|
|
713
575
|
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
);
|
|
718
|
-
if (server.memoryStore) {
|
|
719
|
-
await server.memoryStore.close();
|
|
720
|
-
}
|
|
721
|
-
process.exit(0);
|
|
576
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
577
|
+
main().catch((error) => {
|
|
578
|
+
console.error(`[${new Date().toISOString()}] FATAL [claude-flow-novice-mcp] ${error.message}`);
|
|
579
|
+
process.exit(1);
|
|
722
580
|
});
|
|
723
|
-
}
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
export { ClaudeFlowNoviceMCPServer };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-flow-novice",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "Simplified Claude Flow for beginners - AI agent orchestration made easy. Enhanced init command creates complete agent system (8 core agents), MCP configuration, and automated hooks. All memory leaks eliminated, zero deprecated dependencies, full project setup in one command.",
|
|
3
|
+
"version": "1.1.7",
|
|
4
|
+
"description": "Simplified Claude Flow for beginners - AI agent orchestration made easy. Enhanced init command creates complete agent system (8 core agents), MCP configuration with 36 essential tools, and automated hooks. All memory leaks eliminated, zero deprecated dependencies, full project setup in one command.",
|
|
5
5
|
"mcpName": "io.github.ruvnet/claude-flow",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|