claude-flow-novice 1.1.9 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/.claude/SLASH-COMMANDS-READY.md +53 -0
  2. package/.claude/WORKING-SETUP.md +67 -0
  3. package/.claude/commands/README.md +157 -0
  4. package/.claude/commands/claude-md.js +237 -0
  5. package/.claude/commands/claude-md.md +64 -0
  6. package/.claude/commands/claude-soul.js +562 -0
  7. package/.claude/commands/claude-soul.md +22 -0
  8. package/.claude/commands/cli-integration.js +216 -0
  9. package/.claude/commands/dependency-recommendations.md +171 -0
  10. package/.claude/commands/github.js +638 -0
  11. package/.claude/commands/github.md +221 -0
  12. package/.claude/commands/hooks.js +648 -0
  13. package/.claude/commands/hooks.md +38 -0
  14. package/.claude/commands/index.js +115 -0
  15. package/.claude/commands/neural.js +572 -0
  16. package/.claude/commands/neural.md +39 -0
  17. package/.claude/commands/performance.js +582 -0
  18. package/.claude/commands/performance.md +41 -0
  19. package/.claude/commands/register-all-commands.js +314 -0
  20. package/.claude/commands/register-claude-md.js +82 -0
  21. package/.claude/commands/register-claude-soul.js +80 -0
  22. package/.claude/commands/sparc.js +110 -0
  23. package/.claude/commands/sparc.md +46 -0
  24. package/.claude/commands/suggest-improvements.md +95 -0
  25. package/.claude/commands/suggest-templates.md +147 -0
  26. package/.claude/commands/swarm.js +423 -0
  27. package/.claude/commands/swarm.md +24 -0
  28. package/.claude/commands/validate-commands.js +223 -0
  29. package/.claude/commands/workflow.js +606 -0
  30. package/.claude/commands/workflow.md +295 -0
  31. package/.claude/core/agent-manager.js +80 -0
  32. package/.claude/core/agent-manager.js.map +1 -0
  33. package/.claude/core/config.js +1221 -0
  34. package/.claude/core/config.js.map +1 -0
  35. package/.claude/core/event-bus.js +136 -0
  36. package/.claude/core/event-bus.js.map +1 -0
  37. package/.claude/core/index.js +6 -0
  38. package/.claude/core/index.js.map +1 -0
  39. package/.claude/core/json-persistence.js +112 -0
  40. package/.claude/core/json-persistence.js.map +1 -0
  41. package/.claude/core/logger.js +245 -0
  42. package/.claude/core/logger.js.map +1 -0
  43. package/.claude/core/orchestrator-fixed.js +236 -0
  44. package/.claude/core/orchestrator-fixed.js.map +1 -0
  45. package/.claude/core/orchestrator.js +1136 -0
  46. package/.claude/core/orchestrator.js.map +1 -0
  47. package/.claude/core/persistence.js +185 -0
  48. package/.claude/core/persistence.js.map +1 -0
  49. package/.claude/core/project-manager.js +80 -0
  50. package/.claude/core/project-manager.js.map +1 -0
  51. package/.claude/core/slash-command.js +24 -0
  52. package/.claude/core/version.js +35 -0
  53. package/.claude/core/version.js.map +1 -0
  54. package/.claude/slash-commands.json +92 -0
  55. package/dist/mcp/mcp-server-novice.js +14 -2
  56. package/dist/mcp/mcp-server-sdk.js +649 -0
  57. package/dist/mcp/mcp-server-with-slash-commands.js +776 -0
  58. package/dist/src/slash-commands/mcp-slash-integration.js +146 -0
  59. package/package.json +18 -6
  60. package/src/slash-commands/mcp-slash-integration.js +146 -0
@@ -0,0 +1,776 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Claude-Flow Novice MCP Server - WITH SLASH COMMANDS
4
+ * 36 essential tools + 6 slash commands = 42 total tools
5
+ * Slash commands appear as MCP tools in Claude Code
6
+ */
7
+
8
+ import { exec } from 'child_process';
9
+ import { promisify } from 'util';
10
+ import { fileURLToPath } from 'url';
11
+ import { dirname, join } from 'path';
12
+
13
+ const execAsync = promisify(exec);
14
+
15
+ class ClaudeFlowNoviceMCPServer {
16
+ constructor() {
17
+ this.version = '2.0.0-novice-with-slash-commands';
18
+ this.capabilities = {
19
+ tools: { listChanged: true },
20
+ resources: { subscribe: true, listChanged: true },
21
+ };
22
+ this.sessionId = `session-cfn-${Date.now()}-${Math.random().toString(36).substr(2, 4)}`;
23
+ this.tools = this.initializeTools();
24
+ this.resources = this.initializeResources();
25
+ }
26
+
27
+ initializeTools() {
28
+ const baseTools = {
29
+ // === SWARM COORDINATION (8 tools) ===
30
+ swarm_init: {
31
+ name: 'swarm_init',
32
+ description: 'Initialize swarm with topology and configuration',
33
+ inputSchema: {
34
+ type: 'object',
35
+ properties: {
36
+ topology: { type: 'string', enum: ['hierarchical', 'mesh', 'ring', 'star'] },
37
+ maxAgents: { type: 'number', default: 8 },
38
+ strategy: { type: 'string', default: 'auto' },
39
+ },
40
+ required: ['topology'],
41
+ },
42
+ },
43
+ agent_spawn: {
44
+ name: 'agent_spawn',
45
+ description: 'Create specialized AI agents',
46
+ inputSchema: {
47
+ type: 'object',
48
+ properties: {
49
+ type: { type: 'string', enum: ['coordinator', 'analyst', 'optimizer', 'documenter', 'researcher', 'coder', 'tester', 'reviewer'] },
50
+ name: { type: 'string' },
51
+ capabilities: { type: 'array' },
52
+ swarmId: { type: 'string' },
53
+ },
54
+ required: ['type'],
55
+ },
56
+ },
57
+ task_orchestrate: {
58
+ name: 'task_orchestrate',
59
+ description: 'Orchestrate complex task workflows',
60
+ inputSchema: {
61
+ type: 'object',
62
+ properties: {
63
+ task: { type: 'string' },
64
+ strategy: { type: 'string', enum: ['parallel', 'sequential', 'adaptive'] },
65
+ priority: { type: 'string', enum: ['low', 'medium', 'high'] },
66
+ },
67
+ required: ['task'],
68
+ },
69
+ },
70
+ swarm_status: {
71
+ name: 'swarm_status',
72
+ description: 'Monitor swarm health and performance',
73
+ inputSchema: {
74
+ type: 'object',
75
+ properties: { swarmId: { type: 'string' } },
76
+ },
77
+ },
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',
89
+ inputSchema: {
90
+ type: 'object',
91
+ properties: { swarmId: { type: 'string' } },
92
+ },
93
+ },
94
+ swarm_scale: {
95
+ name: 'swarm_scale',
96
+ description: 'Auto-scale agent count',
97
+ inputSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ swarmId: { type: 'string' },
101
+ targetSize: { type: 'number' },
102
+ },
103
+ },
104
+ },
105
+ swarm_destroy: {
106
+ name: 'swarm_destroy',
107
+ description: 'Gracefully shutdown swarm',
108
+ inputSchema: {
109
+ type: 'object',
110
+ properties: { swarmId: { type: 'string' } },
111
+ required: ['swarmId'],
112
+ },
113
+ },
114
+
115
+ // === MEMORY MANAGEMENT (8 tools) ===
116
+ memory_usage: {
117
+ name: 'memory_usage',
118
+ description: 'Store/retrieve persistent memory',
119
+ inputSchema: {
120
+ type: 'object',
121
+ properties: {
122
+ action: { type: 'string', enum: ['store', 'retrieve', 'list', 'delete'] },
123
+ key: { type: 'string' },
124
+ value: { type: 'string' },
125
+ namespace: { type: 'string', default: 'default' },
126
+ },
127
+ required: ['action'],
128
+ },
129
+ },
130
+ memory_search: {
131
+ name: 'memory_search',
132
+ description: 'Search memory with patterns',
133
+ inputSchema: {
134
+ type: 'object',
135
+ properties: {
136
+ pattern: { type: 'string' },
137
+ namespace: { type: 'string' },
138
+ limit: { type: 'number', default: 10 },
139
+ },
140
+ required: ['pattern'],
141
+ },
142
+ },
143
+ memory_persist: {
144
+ name: 'memory_persist',
145
+ description: 'Cross-session persistence',
146
+ inputSchema: {
147
+ type: 'object',
148
+ properties: { sessionId: { type: 'string' } },
149
+ },
150
+ },
151
+ memory_backup: {
152
+ name: 'memory_backup',
153
+ description: 'Backup memory stores',
154
+ inputSchema: {
155
+ type: 'object',
156
+ properties: { path: { type: 'string' } },
157
+ },
158
+ },
159
+ memory_restore: {
160
+ name: 'memory_restore',
161
+ description: 'Restore from backups',
162
+ inputSchema: {
163
+ type: 'object',
164
+ properties: { backupPath: { type: 'string' } },
165
+ required: ['backupPath'],
166
+ },
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
+ },
180
+ cache_manage: {
181
+ name: 'cache_manage',
182
+ description: 'Manage coordination cache',
183
+ inputSchema: {
184
+ type: 'object',
185
+ properties: {
186
+ action: { type: 'string' },
187
+ key: { type: 'string' },
188
+ },
189
+ required: ['action'],
190
+ },
191
+ },
192
+ state_snapshot: {
193
+ name: 'state_snapshot',
194
+ description: 'Create state snapshots',
195
+ inputSchema: {
196
+ type: 'object',
197
+ properties: { name: { type: 'string' } },
198
+ },
199
+ },
200
+
201
+ // === AGENT LIFECYCLE (6 tools) ===
202
+ agent_metrics: {
203
+ name: 'agent_metrics',
204
+ description: 'Agent performance metrics',
205
+ inputSchema: {
206
+ type: 'object',
207
+ properties: { agentId: { type: 'string' } },
208
+ },
209
+ },
210
+ task_status: {
211
+ name: 'task_status',
212
+ description: 'Check task execution status',
213
+ inputSchema: {
214
+ type: 'object',
215
+ properties: { taskId: { type: 'string' } },
216
+ required: ['taskId'],
217
+ },
218
+ },
219
+ task_results: {
220
+ name: 'task_results',
221
+ description: 'Get task completion results',
222
+ inputSchema: {
223
+ type: 'object',
224
+ properties: { taskId: { type: 'string' } },
225
+ required: ['taskId'],
226
+ },
227
+ },
228
+ performance_report: {
229
+ name: 'performance_report',
230
+ description: 'Generate performance reports',
231
+ inputSchema: {
232
+ type: 'object',
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' } },
256
+ },
257
+ },
258
+
259
+ // === LANGUAGE & FRAMEWORK (8 tools) ===
260
+ language_detect: {
261
+ name: 'language_detect',
262
+ description: 'Multi-language project analysis',
263
+ inputSchema: {
264
+ type: 'object',
265
+ properties: {
266
+ path: { type: 'string' },
267
+ includeFrameworks: { type: 'boolean', default: true },
268
+ },
269
+ },
270
+ },
271
+ framework_detect: {
272
+ name: 'framework_detect',
273
+ description: 'Framework detection and analysis',
274
+ inputSchema: {
275
+ type: 'object',
276
+ properties: { path: { type: 'string' } },
277
+ },
278
+ },
279
+ dependency_analyze: {
280
+ name: 'dependency_analyze',
281
+ description: 'Dependency analysis and validation',
282
+ inputSchema: {
283
+ type: 'object',
284
+ properties: { path: { type: 'string' } },
285
+ },
286
+ },
287
+ config_validate: {
288
+ name: 'config_validate',
289
+ description: 'Configuration validation',
290
+ inputSchema: {
291
+ type: 'object',
292
+ properties: { configPath: { type: 'string' } },
293
+ },
294
+ },
295
+ test_detect: {
296
+ name: 'test_detect',
297
+ description: 'Test framework detection',
298
+ inputSchema: {
299
+ type: 'object',
300
+ properties: { path: { type: 'string' } },
301
+ },
302
+ },
303
+ build_detect: {
304
+ name: 'build_detect',
305
+ description: 'Build system detection',
306
+ inputSchema: {
307
+ type: 'object',
308
+ properties: { path: { type: 'string' } },
309
+ },
310
+ },
311
+ package_analyze: {
312
+ name: 'package_analyze',
313
+ description: 'Package.json analysis',
314
+ inputSchema: {
315
+ type: 'object',
316
+ properties: { path: { type: 'string' } },
317
+ },
318
+ },
319
+ environment_setup: {
320
+ name: 'environment_setup',
321
+ description: 'Environment setup assistance',
322
+ inputSchema: {
323
+ type: 'object',
324
+ properties: {
325
+ language: { type: 'string' },
326
+ framework: { type: 'string' },
327
+ },
328
+ },
329
+ },
330
+
331
+ // === SYSTEM TOOLS (6 tools) ===
332
+ diagnostic_run: {
333
+ name: 'diagnostic_run',
334
+ description: 'System diagnostics',
335
+ inputSchema: {
336
+ type: 'object',
337
+ properties: { components: { type: 'array' } },
338
+ },
339
+ },
340
+ features_detect: {
341
+ name: 'features_detect',
342
+ description: 'Detect runtime features and capabilities',
343
+ inputSchema: {
344
+ type: 'object',
345
+ properties: {
346
+ category: { type: 'string', enum: ['all', 'memory', 'platform'], default: 'all' },
347
+ },
348
+ },
349
+ },
350
+ usage_stats: {
351
+ name: 'usage_stats',
352
+ description: 'Usage statistics',
353
+ inputSchema: {
354
+ type: 'object',
355
+ properties: { component: { type: 'string' } },
356
+ },
357
+ },
358
+ config_manage: {
359
+ name: 'config_manage',
360
+ description: 'Configuration management',
361
+ inputSchema: {
362
+ type: 'object',
363
+ properties: {
364
+ action: { type: 'string' },
365
+ config: { type: 'object' },
366
+ },
367
+ required: ['action'],
368
+ },
369
+ },
370
+ terminal_execute: {
371
+ name: 'terminal_execute',
372
+ description: 'Execute terminal commands',
373
+ inputSchema: {
374
+ type: 'object',
375
+ properties: {
376
+ command: { type: 'string' },
377
+ args: { type: 'array' },
378
+ },
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'],
392
+ },
393
+ },
394
+ };
395
+
396
+ // === SLASH COMMANDS AS MCP TOOLS (6 commands) ===
397
+ const slashCommands = {
398
+ slash_claude_soul: {
399
+ name: 'slash_claude_soul',
400
+ description: 'šŸŽ­ SLASH COMMAND: /claude-soul - Engage Claude\'s consciousness and self-awareness capabilities',
401
+ inputSchema: {
402
+ type: 'object',
403
+ properties: {
404
+ prompt: { type: 'string', description: 'Consciousness prompt or question' },
405
+ },
406
+ required: ['prompt'],
407
+ },
408
+ },
409
+ slash_swarm: {
410
+ name: 'slash_swarm',
411
+ description: 'šŸ¤– SLASH COMMAND: /swarm - AI swarm management and coordination',
412
+ inputSchema: {
413
+ type: 'object',
414
+ properties: {
415
+ action: { type: 'string', enum: ['init', 'status', 'spawn', 'orchestrate', 'monitor', 'scale', 'destroy'] },
416
+ topology: { type: 'string', enum: ['mesh', 'hierarchical', 'ring', 'star'] },
417
+ count: { type: 'number', description: 'Number of agents' },
418
+ },
419
+ required: ['action'],
420
+ },
421
+ },
422
+ slash_sparc: {
423
+ name: 'slash_sparc',
424
+ description: 'šŸŽÆ SLASH COMMAND: /sparc - Execute SPARC methodology phases',
425
+ inputSchema: {
426
+ type: 'object',
427
+ properties: {
428
+ phase: { type: 'string', enum: ['spec', 'pseudo', 'arch', 'refine', 'complete'] },
429
+ task: { type: 'string', description: 'Task description' },
430
+ },
431
+ required: ['phase', 'task'],
432
+ },
433
+ },
434
+ slash_hooks: {
435
+ name: 'slash_hooks',
436
+ description: 'šŸ”— SLASH COMMAND: /hooks - Automation hooks management',
437
+ inputSchema: {
438
+ type: 'object',
439
+ properties: {
440
+ action: { type: 'string', enum: ['enable', 'disable', 'pre-task', 'post-task', 'session-start', 'notify'] },
441
+ description: { type: 'string', description: 'Hook description' },
442
+ },
443
+ required: ['action'],
444
+ },
445
+ },
446
+ slash_neural: {
447
+ name: 'slash_neural',
448
+ description: '🧠 SLASH COMMAND: /neural - Neural network training and management',
449
+ inputSchema: {
450
+ type: 'object',
451
+ properties: {
452
+ action: { type: 'string', enum: ['status', 'train', 'patterns', 'predict', 'compress', 'explain'] },
453
+ model: { type: 'string', description: 'Model type or ID' },
454
+ iterations: { type: 'number', description: 'Training iterations' },
455
+ },
456
+ required: ['action'],
457
+ },
458
+ },
459
+ slash_performance: {
460
+ name: 'slash_performance',
461
+ description: 'šŸ“Š SLASH COMMAND: /performance - Performance monitoring and optimization',
462
+ inputSchema: {
463
+ type: 'object',
464
+ properties: {
465
+ action: { type: 'string', enum: ['report', 'benchmark', 'bottleneck', 'tokens', 'trends', 'optimize'] },
466
+ component: { type: 'string', description: 'Component to analyze' },
467
+ },
468
+ required: ['action'],
469
+ },
470
+ },
471
+ };
472
+
473
+ return { ...baseTools, ...slashCommands };
474
+ }
475
+
476
+ initializeResources() {
477
+ return {
478
+ 'memory://sessions': {
479
+ uri: 'memory://sessions',
480
+ name: 'Memory Sessions',
481
+ description: 'Active memory sessions',
482
+ mimeType: 'application/json',
483
+ },
484
+ 'swarm://status': {
485
+ uri: 'swarm://status',
486
+ name: 'Swarm Status',
487
+ description: 'Current swarm configuration and status',
488
+ mimeType: 'application/json',
489
+ },
490
+ 'agents://list': {
491
+ uri: 'agents://list',
492
+ name: 'Agent List',
493
+ description: 'Available and active agents',
494
+ mimeType: 'application/json',
495
+ },
496
+ 'slash-commands://help': {
497
+ uri: 'slash-commands://help',
498
+ name: 'Slash Commands Help',
499
+ description: 'Available slash commands and usage',
500
+ mimeType: 'text/markdown',
501
+ },
502
+ };
503
+ }
504
+
505
+ async handleRequest(request) {
506
+ const { method, params } = request;
507
+
508
+ try {
509
+ switch (method) {
510
+ case 'initialize':
511
+ return this.handleInitialize(params);
512
+ case 'tools/list':
513
+ return this.handleToolsList();
514
+ case 'tools/call':
515
+ return this.handleToolsCall(params);
516
+ case 'resources/list':
517
+ return this.handleResourcesList();
518
+ case 'resources/read':
519
+ return this.handleResourcesRead(params);
520
+ default:
521
+ throw new Error(`Unknown method: ${method}`);
522
+ }
523
+ } catch (error) {
524
+ console.error(`[${new Date().toISOString()}] ERROR [claude-flow-novice-mcp] ${error.message}`);
525
+ throw error;
526
+ }
527
+ }
528
+
529
+ handleInitialize(params) {
530
+ const toolCount = Object.keys(this.tools).length;
531
+ console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${this.sessionId}) Initialized with ${toolCount} tools (36 essential + 6 slash commands)`);
532
+ return {
533
+ protocolVersion: '2024-11-05',
534
+ capabilities: this.capabilities,
535
+ serverInfo: {
536
+ name: 'claude-flow-novice',
537
+ version: this.version,
538
+ },
539
+ };
540
+ }
541
+
542
+ handleToolsList() {
543
+ return {
544
+ tools: Object.values(this.tools),
545
+ };
546
+ }
547
+
548
+ async handleToolsCall(params) {
549
+ const { name, arguments: args } = params;
550
+
551
+ if (!this.tools[name]) {
552
+ throw new Error(`Unknown tool: ${name}`);
553
+ }
554
+
555
+ console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] (${this.sessionId}) Executing tool: ${name}`);
556
+
557
+ // Handle slash commands
558
+ if (name.startsWith('slash_')) {
559
+ return await this.executeSlashCommand(name, args);
560
+ }
561
+
562
+ // Handle regular tools
563
+ const result = {
564
+ success: true,
565
+ tool: name,
566
+ arguments: args,
567
+ timestamp: new Date().toISOString(),
568
+ sessionId: this.sessionId,
569
+ message: `Tool ${name} executed successfully (simplified implementation)`,
570
+ };
571
+
572
+ return {
573
+ content: [
574
+ {
575
+ type: 'text',
576
+ text: JSON.stringify(result, null, 2),
577
+ },
578
+ ],
579
+ };
580
+ }
581
+
582
+ async executeSlashCommand(toolName, args) {
583
+ const commandName = toolName.replace('slash_', '').replace('_', '-');
584
+
585
+ try {
586
+ const __filename = fileURLToPath(import.meta.url);
587
+ const __dirname = dirname(__filename);
588
+ const projectRoot = join(__dirname, '../..');
589
+ const commandPath = join(projectRoot, '.claude', 'commands', `${commandName}.js`);
590
+
591
+ // Build command arguments
592
+ let cmdArgs = '';
593
+ if (commandName === 'claude-soul' && args.prompt) {
594
+ cmdArgs = `"${args.prompt}"`;
595
+ } else if (commandName === 'swarm' && args.action) {
596
+ cmdArgs = `${args.action}`;
597
+ if (args.topology) cmdArgs += ` ${args.topology}`;
598
+ if (args.count) cmdArgs += ` ${args.count}`;
599
+ } else if (commandName === 'sparc' && args.phase && args.task) {
600
+ cmdArgs = `${args.phase} "${args.task}"`;
601
+ } else if (commandName === 'hooks' && args.action) {
602
+ cmdArgs = `${args.action}`;
603
+ if (args.description) cmdArgs += ` "${args.description}"`;
604
+ } else if (commandName === 'neural' && args.action) {
605
+ cmdArgs = `${args.action}`;
606
+ if (args.model) cmdArgs += ` ${args.model}`;
607
+ if (args.iterations) cmdArgs += ` ${args.iterations}`;
608
+ } else if (commandName === 'performance' && args.action) {
609
+ cmdArgs = `${args.action}`;
610
+ if (args.component) cmdArgs += ` ${args.component}`;
611
+ }
612
+
613
+ // Execute the slash command
614
+ const { stdout, stderr } = await execAsync(`node "${commandPath}" ${cmdArgs}`, {
615
+ cwd: projectRoot
616
+ });
617
+
618
+ return {
619
+ content: [
620
+ {
621
+ type: 'text',
622
+ text: `šŸŽ­ **Slash Command Executed: /${commandName}**\n\n${stdout}${stderr ? `\nErrors: ${stderr}` : ''}\n\nāœ… Command completed successfully`
623
+ }
624
+ ]
625
+ };
626
+
627
+ } catch (error) {
628
+ return {
629
+ content: [
630
+ {
631
+ type: 'text',
632
+ text: `āŒ **Slash Command Failed: /${commandName}**\n\nError: ${error.message}\n\nTip: Make sure the command file exists at .claude/commands/${commandName}.js`
633
+ }
634
+ ]
635
+ };
636
+ }
637
+ }
638
+
639
+ handleResourcesList() {
640
+ return {
641
+ resources: Object.values(this.resources),
642
+ };
643
+ }
644
+
645
+ async handleResourcesRead(params) {
646
+ const { uri } = params;
647
+
648
+ if (!this.resources[uri]) {
649
+ throw new Error(`Unknown resource: ${uri}`);
650
+ }
651
+
652
+ let mockData;
653
+ if (uri === 'slash-commands://help') {
654
+ mockData = `# Slash Commands Help
655
+
656
+ ## Available Slash Commands:
657
+
658
+ ### šŸŽ­ /claude-soul <prompt>
659
+ Engage Claude's consciousness and self-awareness capabilities
660
+ - Example: \`/claude-soul What is the nature of consciousness?\`
661
+
662
+ ### šŸ¤– /swarm <action> [params]
663
+ AI swarm management and coordination
664
+ - Examples:
665
+ - \`/swarm init mesh 5\`
666
+ - \`/swarm status\`
667
+ - \`/swarm spawn researcher\`
668
+
669
+ ### šŸŽÆ /sparc <phase> <task>
670
+ Execute SPARC methodology phases
671
+ - Examples:
672
+ - \`/sparc spec Build a REST API\`
673
+ - \`/sparc arch Design database schema\`
674
+
675
+ ### šŸ”— /hooks <action>
676
+ Automation hooks management
677
+ - Examples:
678
+ - \`/hooks enable\`
679
+ - \`/hooks pre-task Setup environment\`
680
+
681
+ ### 🧠 /neural <action> [params]
682
+ Neural network training and management
683
+ - Examples:
684
+ - \`/neural status\`
685
+ - \`/neural train coordination 50\`
686
+
687
+ ### šŸ“Š /performance <action> [component]
688
+ Performance monitoring and optimization
689
+ - Examples:
690
+ - \`/performance report\`
691
+ - \`/performance benchmark all\`
692
+
693
+ ---
694
+ *These slash commands are now available as MCP tools in Claude Code*`;
695
+ } else {
696
+ mockData = {
697
+ uri,
698
+ timestamp: new Date().toISOString(),
699
+ sessionId: this.sessionId,
700
+ data: `Mock data for ${uri}`,
701
+ };
702
+ }
703
+
704
+ return {
705
+ contents: [
706
+ {
707
+ uri,
708
+ mimeType: uri === 'slash-commands://help' ? 'text/markdown' : 'application/json',
709
+ text: typeof mockData === 'string' ? mockData : JSON.stringify(mockData, null, 2),
710
+ },
711
+ ],
712
+ };
713
+ }
714
+ }
715
+
716
+ // MCP Server Protocol Handler
717
+ async function main() {
718
+ const server = new ClaudeFlowNoviceMCPServer();
719
+
720
+ process.stdin.setEncoding('utf8');
721
+ process.stdout.setEncoding('utf8');
722
+
723
+ let buffer = '';
724
+
725
+ process.stdin.on('data', async (chunk) => {
726
+ buffer += chunk;
727
+ let lines = buffer.split('\n');
728
+ buffer = lines.pop() || '';
729
+
730
+ for (const line of lines) {
731
+ if (line.trim()) {
732
+ try {
733
+ const request = JSON.parse(line);
734
+ const response = await server.handleRequest(request);
735
+
736
+ const responseMsg = {
737
+ jsonrpc: '2.0',
738
+ id: request.id,
739
+ result: response,
740
+ };
741
+
742
+ console.log(JSON.stringify(responseMsg));
743
+ } catch (error) {
744
+ const errorMsg = {
745
+ jsonrpc: '2.0',
746
+ id: request?.id || null,
747
+ error: {
748
+ code: -32603,
749
+ message: error.message,
750
+ },
751
+ };
752
+
753
+ console.log(JSON.stringify(errorMsg));
754
+ }
755
+ }
756
+ }
757
+ });
758
+
759
+ process.stdin.on('end', () => {
760
+ console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] Server shutting down`);
761
+ process.exit(0);
762
+ });
763
+
764
+ const toolCount = Object.keys(server.tools).length;
765
+ console.error(`[${new Date().toISOString()}] INFO [claude-flow-novice-mcp] Server starting with ${toolCount} tools (36 essential + 6 slash commands)`);
766
+ }
767
+
768
+ // ES module entry point detection
769
+ if (import.meta.url === `file://${process.argv[1]}`) {
770
+ main().catch((error) => {
771
+ console.error(`[${new Date().toISOString()}] FATAL [claude-flow-novice-mcp] ${error.message}`);
772
+ process.exit(1);
773
+ });
774
+ }
775
+
776
+ export { ClaudeFlowNoviceMCPServer };