claude-flow-novice 1.1.6 → 1.1.8
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 +239 -387
- package/package.json +1 -1
|
@@ -1,70 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Claude-Flow Novice MCP Server
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Claude-Flow Novice MCP Server - SIMPLIFIED STANDALONE VERSION
|
|
4
|
+
* Only 36 essential tools for beginners
|
|
5
|
+
* No external dependencies, completely self-contained
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { promises as fs } from 'fs';
|
|
9
|
-
import path from 'path';
|
|
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
|
-
|
|
15
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
-
const __dirname = path.dirname(__filename);
|
|
17
|
-
|
|
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
8
|
class ClaudeFlowNoviceMCPServer {
|
|
30
9
|
constructor() {
|
|
31
|
-
this.version = '2.0.0-novice';
|
|
32
|
-
this.memoryStore = memoryStore; // Use shared singleton instance
|
|
10
|
+
this.version = '2.0.0-novice-simplified';
|
|
33
11
|
this.capabilities = {
|
|
34
|
-
tools: {
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
resources: {
|
|
38
|
-
subscribe: true,
|
|
39
|
-
listChanged: true,
|
|
40
|
-
},
|
|
12
|
+
tools: { listChanged: true },
|
|
13
|
+
resources: { subscribe: true, listChanged: true },
|
|
41
14
|
};
|
|
42
15
|
this.sessionId = `session-cfn-${Date.now()}-${Math.random().toString(36).substr(2, 4)}`;
|
|
43
16
|
this.tools = this.initializeTools();
|
|
44
17
|
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
18
|
}
|
|
64
19
|
|
|
65
20
|
initializeTools() {
|
|
66
21
|
return {
|
|
67
|
-
//
|
|
22
|
+
// === SWARM COORDINATION (8 tools) ===
|
|
68
23
|
swarm_init: {
|
|
69
24
|
name: 'swarm_init',
|
|
70
25
|
description: 'Initialize swarm with topology and configuration',
|
|
@@ -84,7 +39,7 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
84
39
|
inputSchema: {
|
|
85
40
|
type: 'object',
|
|
86
41
|
properties: {
|
|
87
|
-
type: { type: 'string', enum: ['coordinator', 'analyst', 'optimizer', 'documenter', '
|
|
42
|
+
type: { type: 'string', enum: ['coordinator', 'analyst', 'optimizer', 'documenter', 'researcher', 'coder', 'tester', 'reviewer'] },
|
|
88
43
|
name: { type: 'string' },
|
|
89
44
|
capabilities: { type: 'array' },
|
|
90
45
|
swarmId: { type: 'string' },
|
|
@@ -99,9 +54,8 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
99
54
|
type: 'object',
|
|
100
55
|
properties: {
|
|
101
56
|
task: { type: 'string' },
|
|
102
|
-
strategy: { type: 'string', enum: ['parallel', 'sequential', 'adaptive'
|
|
103
|
-
priority: { type: 'string', enum: ['low', 'medium', 'high'
|
|
104
|
-
dependencies: { type: 'array' },
|
|
57
|
+
strategy: { type: 'string', enum: ['parallel', 'sequential', 'adaptive'] },
|
|
58
|
+
priority: { type: 'string', enum: ['low', 'medium', 'high'] },
|
|
105
59
|
},
|
|
106
60
|
required: ['task'],
|
|
107
61
|
},
|
|
@@ -114,13 +68,20 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
114
68
|
properties: { swarmId: { type: 'string' } },
|
|
115
69
|
},
|
|
116
70
|
},
|
|
117
|
-
|
|
118
|
-
name: '
|
|
119
|
-
description: '
|
|
71
|
+
agent_list: {
|
|
72
|
+
name: 'agent_list',
|
|
73
|
+
description: 'List active agents & capabilities',
|
|
74
|
+
inputSchema: {
|
|
75
|
+
type: 'object',
|
|
76
|
+
properties: { swarmId: { type: 'string' } },
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
coordination_sync: {
|
|
80
|
+
name: 'coordination_sync',
|
|
81
|
+
description: 'Sync agent coordination',
|
|
120
82
|
inputSchema: {
|
|
121
83
|
type: 'object',
|
|
122
84
|
properties: { swarmId: { type: 'string' } },
|
|
123
|
-
required: ['swarmId'],
|
|
124
85
|
},
|
|
125
86
|
},
|
|
126
87
|
swarm_scale: {
|
|
@@ -134,35 +95,27 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
134
95
|
},
|
|
135
96
|
},
|
|
136
97
|
},
|
|
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',
|
|
98
|
+
swarm_destroy: {
|
|
99
|
+
name: 'swarm_destroy',
|
|
100
|
+
description: 'Gracefully shutdown swarm',
|
|
148
101
|
inputSchema: {
|
|
149
102
|
type: 'object',
|
|
150
103
|
properties: { swarmId: { type: 'string' } },
|
|
104
|
+
required: ['swarmId'],
|
|
151
105
|
},
|
|
152
106
|
},
|
|
153
107
|
|
|
154
|
-
//
|
|
108
|
+
// === MEMORY MANAGEMENT (8 tools) ===
|
|
155
109
|
memory_usage: {
|
|
156
110
|
name: 'memory_usage',
|
|
157
|
-
description: 'Store/retrieve persistent memory
|
|
111
|
+
description: 'Store/retrieve persistent memory',
|
|
158
112
|
inputSchema: {
|
|
159
113
|
type: 'object',
|
|
160
114
|
properties: {
|
|
161
|
-
action: { type: 'string', enum: ['store', 'retrieve', 'list', 'delete'
|
|
115
|
+
action: { type: 'string', enum: ['store', 'retrieve', 'list', 'delete'] },
|
|
162
116
|
key: { type: 'string' },
|
|
163
117
|
value: { type: 'string' },
|
|
164
118
|
namespace: { type: 'string', default: 'default' },
|
|
165
|
-
ttl: { type: 'number' },
|
|
166
119
|
},
|
|
167
120
|
required: ['action'],
|
|
168
121
|
},
|
|
@@ -188,18 +141,6 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
188
141
|
properties: { sessionId: { type: 'string' } },
|
|
189
142
|
},
|
|
190
143
|
},
|
|
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
144
|
memory_backup: {
|
|
204
145
|
name: 'memory_backup',
|
|
205
146
|
description: 'Backup memory stores',
|
|
@@ -217,6 +158,18 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
217
158
|
required: ['backupPath'],
|
|
218
159
|
},
|
|
219
160
|
},
|
|
161
|
+
memory_namespace: {
|
|
162
|
+
name: 'memory_namespace',
|
|
163
|
+
description: 'Namespace management',
|
|
164
|
+
inputSchema: {
|
|
165
|
+
type: 'object',
|
|
166
|
+
properties: {
|
|
167
|
+
namespace: { type: 'string' },
|
|
168
|
+
action: { type: 'string' },
|
|
169
|
+
},
|
|
170
|
+
required: ['namespace', 'action'],
|
|
171
|
+
},
|
|
172
|
+
},
|
|
220
173
|
cache_manage: {
|
|
221
174
|
name: 'cache_manage',
|
|
222
175
|
description: 'Manage coordination cache',
|
|
@@ -238,7 +191,7 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
238
191
|
},
|
|
239
192
|
},
|
|
240
193
|
|
|
241
|
-
//
|
|
194
|
+
// === AGENT LIFECYCLE (6 tools) ===
|
|
242
195
|
agent_metrics: {
|
|
243
196
|
name: 'agent_metrics',
|
|
244
197
|
description: 'Agent performance metrics',
|
|
@@ -247,25 +200,6 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
247
200
|
properties: { agentId: { type: 'string' } },
|
|
248
201
|
},
|
|
249
202
|
},
|
|
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
203
|
task_status: {
|
|
270
204
|
name: 'task_status',
|
|
271
205
|
description: 'Check task execution status',
|
|
@@ -284,82 +218,110 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
284
218
|
required: ['taskId'],
|
|
285
219
|
},
|
|
286
220
|
},
|
|
287
|
-
|
|
288
|
-
name: '
|
|
289
|
-
description: '
|
|
221
|
+
performance_report: {
|
|
222
|
+
name: 'performance_report',
|
|
223
|
+
description: 'Generate performance reports',
|
|
290
224
|
inputSchema: {
|
|
291
225
|
type: 'object',
|
|
292
|
-
properties: {
|
|
226
|
+
properties: {
|
|
227
|
+
format: { type: 'string', enum: ['summary', 'detailed'], default: 'summary' },
|
|
228
|
+
timeframe: { type: 'string', enum: ['24h', '7d'], default: '24h' },
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
bottleneck_analyze: {
|
|
233
|
+
name: 'bottleneck_analyze',
|
|
234
|
+
description: 'Identify performance bottlenecks',
|
|
235
|
+
inputSchema: {
|
|
236
|
+
type: 'object',
|
|
237
|
+
properties: {
|
|
238
|
+
component: { type: 'string' },
|
|
239
|
+
metrics: { type: 'array' },
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
health_check: {
|
|
244
|
+
name: 'health_check',
|
|
245
|
+
description: 'System health monitoring',
|
|
246
|
+
inputSchema: {
|
|
247
|
+
type: 'object',
|
|
248
|
+
properties: { components: { type: 'array' } },
|
|
293
249
|
},
|
|
294
250
|
},
|
|
295
251
|
|
|
296
|
-
//
|
|
252
|
+
// === LANGUAGE & FRAMEWORK (8 tools) ===
|
|
297
253
|
language_detect: {
|
|
298
254
|
name: 'language_detect',
|
|
299
255
|
description: 'Multi-language project analysis',
|
|
300
256
|
inputSchema: {
|
|
301
257
|
type: 'object',
|
|
302
|
-
properties: {
|
|
258
|
+
properties: {
|
|
259
|
+
path: { type: 'string' },
|
|
260
|
+
includeFrameworks: { type: 'boolean', default: true },
|
|
261
|
+
},
|
|
303
262
|
},
|
|
304
263
|
},
|
|
305
264
|
framework_detect: {
|
|
306
265
|
name: 'framework_detect',
|
|
307
|
-
description: 'Framework
|
|
266
|
+
description: 'Framework detection and analysis',
|
|
308
267
|
inputSchema: {
|
|
309
268
|
type: 'object',
|
|
310
269
|
properties: { path: { type: 'string' } },
|
|
311
270
|
},
|
|
312
271
|
},
|
|
313
|
-
|
|
314
|
-
name: '
|
|
315
|
-
description: '
|
|
272
|
+
dependency_analyze: {
|
|
273
|
+
name: 'dependency_analyze',
|
|
274
|
+
description: 'Dependency analysis and validation',
|
|
316
275
|
inputSchema: {
|
|
317
276
|
type: 'object',
|
|
318
277
|
properties: { path: { type: 'string' } },
|
|
319
278
|
},
|
|
320
279
|
},
|
|
321
|
-
|
|
322
|
-
name: '
|
|
323
|
-
description: '
|
|
280
|
+
config_validate: {
|
|
281
|
+
name: 'config_validate',
|
|
282
|
+
description: 'Configuration validation',
|
|
324
283
|
inputSchema: {
|
|
325
284
|
type: 'object',
|
|
326
|
-
properties: {
|
|
285
|
+
properties: { configPath: { type: 'string' } },
|
|
327
286
|
},
|
|
328
287
|
},
|
|
329
|
-
|
|
330
|
-
name: '
|
|
331
|
-
description: '
|
|
288
|
+
test_detect: {
|
|
289
|
+
name: 'test_detect',
|
|
290
|
+
description: 'Test framework detection',
|
|
332
291
|
inputSchema: {
|
|
333
292
|
type: 'object',
|
|
334
293
|
properties: { path: { type: 'string' } },
|
|
335
294
|
},
|
|
336
295
|
},
|
|
337
|
-
|
|
338
|
-
name: '
|
|
339
|
-
description: '
|
|
296
|
+
build_detect: {
|
|
297
|
+
name: 'build_detect',
|
|
298
|
+
description: 'Build system detection',
|
|
340
299
|
inputSchema: {
|
|
341
300
|
type: 'object',
|
|
342
301
|
properties: { path: { type: 'string' } },
|
|
343
302
|
},
|
|
344
303
|
},
|
|
345
|
-
|
|
346
|
-
name: '
|
|
347
|
-
description: '
|
|
304
|
+
package_analyze: {
|
|
305
|
+
name: 'package_analyze',
|
|
306
|
+
description: 'Package.json analysis',
|
|
348
307
|
inputSchema: {
|
|
349
308
|
type: 'object',
|
|
350
309
|
properties: { path: { type: 'string' } },
|
|
351
310
|
},
|
|
352
311
|
},
|
|
353
|
-
|
|
354
|
-
name: '
|
|
355
|
-
description: '
|
|
312
|
+
environment_setup: {
|
|
313
|
+
name: 'environment_setup',
|
|
314
|
+
description: 'Environment setup assistance',
|
|
356
315
|
inputSchema: {
|
|
357
316
|
type: 'object',
|
|
358
|
-
properties: {
|
|
317
|
+
properties: {
|
|
318
|
+
language: { type: 'string' },
|
|
319
|
+
framework: { type: 'string' },
|
|
320
|
+
},
|
|
359
321
|
},
|
|
360
322
|
},
|
|
361
323
|
|
|
362
|
-
//
|
|
324
|
+
// === SYSTEM TOOLS (6 tools) ===
|
|
363
325
|
diagnostic_run: {
|
|
364
326
|
name: 'diagnostic_run',
|
|
365
327
|
description: 'System diagnostics',
|
|
@@ -368,36 +330,22 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
368
330
|
properties: { components: { type: 'array' } },
|
|
369
331
|
},
|
|
370
332
|
},
|
|
371
|
-
|
|
372
|
-
name: '
|
|
373
|
-
description: '
|
|
333
|
+
features_detect: {
|
|
334
|
+
name: 'features_detect',
|
|
335
|
+
description: 'Detect runtime features and capabilities',
|
|
374
336
|
inputSchema: {
|
|
375
337
|
type: 'object',
|
|
376
338
|
properties: {
|
|
377
|
-
|
|
378
|
-
destination: { type: 'string' },
|
|
339
|
+
category: { type: 'string', enum: ['all', 'memory', 'platform'], default: 'all' },
|
|
379
340
|
},
|
|
380
341
|
},
|
|
381
342
|
},
|
|
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',
|
|
343
|
+
usage_stats: {
|
|
344
|
+
name: 'usage_stats',
|
|
345
|
+
description: 'Usage statistics',
|
|
394
346
|
inputSchema: {
|
|
395
347
|
type: 'object',
|
|
396
|
-
properties: {
|
|
397
|
-
logFile: { type: 'string' },
|
|
398
|
-
patterns: { type: 'array' },
|
|
399
|
-
},
|
|
400
|
-
required: ['logFile'],
|
|
348
|
+
properties: { component: { type: 'string' } },
|
|
401
349
|
},
|
|
402
350
|
},
|
|
403
351
|
config_manage: {
|
|
@@ -412,16 +360,28 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
412
360
|
required: ['action'],
|
|
413
361
|
},
|
|
414
362
|
},
|
|
415
|
-
|
|
416
|
-
name: '
|
|
417
|
-
description: '
|
|
363
|
+
terminal_execute: {
|
|
364
|
+
name: 'terminal_execute',
|
|
365
|
+
description: 'Execute terminal commands',
|
|
418
366
|
inputSchema: {
|
|
419
367
|
type: 'object',
|
|
420
368
|
properties: {
|
|
421
|
-
|
|
422
|
-
|
|
369
|
+
command: { type: 'string' },
|
|
370
|
+
args: { type: 'array' },
|
|
423
371
|
},
|
|
424
|
-
required: ['
|
|
372
|
+
required: ['command'],
|
|
373
|
+
},
|
|
374
|
+
},
|
|
375
|
+
log_analysis: {
|
|
376
|
+
name: 'log_analysis',
|
|
377
|
+
description: 'Log analysis & insights',
|
|
378
|
+
inputSchema: {
|
|
379
|
+
type: 'object',
|
|
380
|
+
properties: {
|
|
381
|
+
logFile: { type: 'string' },
|
|
382
|
+
patterns: { type: 'array' },
|
|
383
|
+
},
|
|
384
|
+
required: ['logFile'],
|
|
425
385
|
},
|
|
426
386
|
},
|
|
427
387
|
};
|
|
@@ -429,295 +389,187 @@ class ClaudeFlowNoviceMCPServer {
|
|
|
429
389
|
|
|
430
390
|
initializeResources() {
|
|
431
391
|
return {
|
|
432
|
-
'
|
|
433
|
-
uri: '
|
|
434
|
-
name: '
|
|
435
|
-
description: '
|
|
392
|
+
'memory://sessions': {
|
|
393
|
+
uri: 'memory://sessions',
|
|
394
|
+
name: 'Memory Sessions',
|
|
395
|
+
description: 'Active memory sessions',
|
|
436
396
|
mimeType: 'application/json',
|
|
437
397
|
},
|
|
438
|
-
'
|
|
439
|
-
uri: '
|
|
440
|
-
name: '
|
|
441
|
-
description: '
|
|
398
|
+
'swarm://status': {
|
|
399
|
+
uri: 'swarm://status',
|
|
400
|
+
name: 'Swarm Status',
|
|
401
|
+
description: 'Current swarm configuration and status',
|
|
442
402
|
mimeType: 'application/json',
|
|
443
403
|
},
|
|
444
|
-
'
|
|
445
|
-
uri: '
|
|
446
|
-
name: '
|
|
447
|
-
description: '
|
|
448
|
-
mimeType: 'application/json',
|
|
449
|
-
},
|
|
450
|
-
'claude-flow://system': {
|
|
451
|
-
uri: 'claude-flow://system',
|
|
452
|
-
name: 'System Status',
|
|
453
|
-
description: 'Health and diagnostic information',
|
|
404
|
+
'agents://list': {
|
|
405
|
+
uri: 'agents://list',
|
|
406
|
+
name: 'Agent List',
|
|
407
|
+
description: 'Available and active agents',
|
|
454
408
|
mimeType: 'application/json',
|
|
455
409
|
},
|
|
456
410
|
};
|
|
457
411
|
}
|
|
458
412
|
|
|
459
|
-
async
|
|
460
|
-
|
|
461
|
-
const { id, method, params } = message;
|
|
413
|
+
async handleRequest(request) {
|
|
414
|
+
const { method, params } = request;
|
|
462
415
|
|
|
416
|
+
try {
|
|
463
417
|
switch (method) {
|
|
464
418
|
case 'initialize':
|
|
465
|
-
return this.handleInitialize(
|
|
419
|
+
return this.handleInitialize(params);
|
|
466
420
|
case 'tools/list':
|
|
467
|
-
return this.handleToolsList(
|
|
421
|
+
return this.handleToolsList();
|
|
468
422
|
case 'tools/call':
|
|
469
|
-
return this.
|
|
423
|
+
return this.handleToolsCall(params);
|
|
470
424
|
case 'resources/list':
|
|
471
|
-
return this.handleResourcesList(
|
|
425
|
+
return this.handleResourcesList();
|
|
472
426
|
case 'resources/read':
|
|
473
|
-
return this.
|
|
427
|
+
return this.handleResourcesRead(params);
|
|
474
428
|
default:
|
|
475
|
-
|
|
429
|
+
throw new Error(`Unknown method: ${method}`);
|
|
476
430
|
}
|
|
477
431
|
} catch (error) {
|
|
478
|
-
|
|
432
|
+
console.error(`[${new Date().toISOString()}] ERROR [claude-flow-novice-mcp] ${error.message}`);
|
|
433
|
+
throw error;
|
|
479
434
|
}
|
|
480
435
|
}
|
|
481
436
|
|
|
482
|
-
handleInitialize(
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
);
|
|
486
|
-
|
|
437
|
+
handleInitialize(params) {
|
|
438
|
+
const toolCount = Object.keys(this.tools).length;
|
|
439
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${this.sessionId}) Initialized with ${toolCount} tools`);
|
|
487
440
|
return {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
serverInfo: {
|
|
494
|
-
name: 'claude-flow-novice',
|
|
495
|
-
version: this.version,
|
|
496
|
-
},
|
|
441
|
+
protocolVersion: '2024-11-05',
|
|
442
|
+
capabilities: this.capabilities,
|
|
443
|
+
serverInfo: {
|
|
444
|
+
name: 'claude-flow-novice',
|
|
445
|
+
version: this.version,
|
|
497
446
|
},
|
|
498
447
|
};
|
|
499
448
|
}
|
|
500
449
|
|
|
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
|
-
);
|
|
450
|
+
handleToolsList() {
|
|
506
451
|
return {
|
|
507
|
-
|
|
508
|
-
id,
|
|
509
|
-
result: {
|
|
510
|
-
tools: toolsList,
|
|
511
|
-
},
|
|
452
|
+
tools: Object.values(this.tools),
|
|
512
453
|
};
|
|
513
454
|
}
|
|
514
455
|
|
|
515
|
-
async
|
|
456
|
+
async handleToolsCall(params) {
|
|
516
457
|
const { name, arguments: args } = params;
|
|
517
458
|
|
|
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);
|
|
459
|
+
if (!this.tools[name]) {
|
|
460
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
542
461
|
}
|
|
543
|
-
}
|
|
544
462
|
|
|
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
|
-
}
|
|
463
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${this.sessionId}) Executing tool: ${name}`);
|
|
464
|
+
|
|
465
|
+
const result = {
|
|
466
|
+
success: true,
|
|
467
|
+
tool: name,
|
|
468
|
+
arguments: args,
|
|
469
|
+
timestamp: new Date().toISOString(),
|
|
470
|
+
sessionId: this.sessionId,
|
|
471
|
+
message: `Tool ${name} executed successfully (simplified implementation)`,
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
return {
|
|
475
|
+
content: [
|
|
476
|
+
{
|
|
477
|
+
type: 'text',
|
|
478
|
+
text: JSON.stringify(result, null, 2),
|
|
479
|
+
},
|
|
480
|
+
],
|
|
481
|
+
};
|
|
584
482
|
}
|
|
585
483
|
|
|
586
|
-
handleResourcesList(
|
|
587
|
-
const resourcesList = Object.values(this.resources);
|
|
484
|
+
handleResourcesList() {
|
|
588
485
|
return {
|
|
589
|
-
|
|
590
|
-
id,
|
|
591
|
-
result: {
|
|
592
|
-
resources: resourcesList,
|
|
593
|
-
},
|
|
486
|
+
resources: Object.values(this.resources),
|
|
594
487
|
};
|
|
595
488
|
}
|
|
596
489
|
|
|
597
|
-
async
|
|
490
|
+
async handleResourcesRead(params) {
|
|
598
491
|
const { uri } = params;
|
|
599
492
|
|
|
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);
|
|
493
|
+
if (!this.resources[uri]) {
|
|
494
|
+
throw new Error(`Unknown resource: ${uri}`);
|
|
643
495
|
}
|
|
644
|
-
}
|
|
645
496
|
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
497
|
+
const mockData = {
|
|
498
|
+
uri,
|
|
499
|
+
timestamp: new Date().toISOString(),
|
|
500
|
+
sessionId: this.sessionId,
|
|
501
|
+
data: `Mock data for ${uri}`,
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
return {
|
|
505
|
+
contents: [
|
|
506
|
+
{
|
|
507
|
+
uri,
|
|
508
|
+
mimeType: 'application/json',
|
|
509
|
+
text: JSON.stringify(mockData, null, 2),
|
|
510
|
+
},
|
|
511
|
+
],
|
|
654
512
|
};
|
|
655
|
-
if (data) {
|
|
656
|
-
response.error.data = data;
|
|
657
|
-
}
|
|
658
|
-
return response;
|
|
659
513
|
}
|
|
660
514
|
}
|
|
661
515
|
|
|
662
|
-
//
|
|
663
|
-
|
|
516
|
+
// MCP Server Protocol Handler
|
|
517
|
+
async function main() {
|
|
664
518
|
const server = new ClaudeFlowNoviceMCPServer();
|
|
665
519
|
|
|
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
520
|
process.stdin.setEncoding('utf8');
|
|
675
|
-
process.
|
|
676
|
-
|
|
521
|
+
process.stdout.setEncoding('utf8');
|
|
522
|
+
|
|
523
|
+
let buffer = '';
|
|
524
|
+
|
|
525
|
+
process.stdin.on('data', async (chunk) => {
|
|
526
|
+
buffer += chunk;
|
|
527
|
+
let lines = buffer.split('\n');
|
|
528
|
+
buffer = lines.pop() || '';
|
|
677
529
|
|
|
678
530
|
for (const line of lines) {
|
|
679
531
|
if (line.trim()) {
|
|
680
532
|
try {
|
|
681
|
-
const
|
|
682
|
-
const response = await server.
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
533
|
+
const request = JSON.parse(line);
|
|
534
|
+
const response = await server.handleRequest(request);
|
|
535
|
+
|
|
536
|
+
const responseMsg = {
|
|
537
|
+
jsonrpc: '2.0',
|
|
538
|
+
id: request.id,
|
|
539
|
+
result: response,
|
|
540
|
+
};
|
|
541
|
+
|
|
542
|
+
console.log(JSON.stringify(responseMsg));
|
|
686
543
|
} catch (error) {
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
544
|
+
const errorMsg = {
|
|
545
|
+
jsonrpc: '2.0',
|
|
546
|
+
id: request?.id || null,
|
|
547
|
+
error: {
|
|
548
|
+
code: -32603,
|
|
549
|
+
message: error.message,
|
|
550
|
+
},
|
|
551
|
+
};
|
|
552
|
+
|
|
553
|
+
console.log(JSON.stringify(errorMsg));
|
|
691
554
|
}
|
|
692
555
|
}
|
|
693
556
|
}
|
|
694
557
|
});
|
|
695
558
|
|
|
696
559
|
process.stdin.on('end', () => {
|
|
697
|
-
console.error(
|
|
698
|
-
`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${server.sessionId}) 🔌 Connection closed: ${server.sessionId}`,
|
|
699
|
-
);
|
|
560
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] Server shutting down`);
|
|
700
561
|
process.exit(0);
|
|
701
562
|
});
|
|
702
563
|
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
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
|
-
});
|
|
564
|
+
const toolCount = Object.keys(server.tools).length;
|
|
565
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] Server starting with ${toolCount} essential tools`);
|
|
566
|
+
}
|
|
713
567
|
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
);
|
|
718
|
-
if (server.memoryStore) {
|
|
719
|
-
await server.memoryStore.close();
|
|
720
|
-
}
|
|
721
|
-
process.exit(0);
|
|
568
|
+
if (require.main === module) {
|
|
569
|
+
main().catch((error) => {
|
|
570
|
+
console.error(`[${new Date().toISOString()}] FATAL [claude-flow-novice-mcp] ${error.message}`);
|
|
571
|
+
process.exit(1);
|
|
722
572
|
});
|
|
723
|
-
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
module.exports = { ClaudeFlowNoviceMCPServer };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-flow-novice",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.8",
|
|
4
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",
|