moflo 4.8.19 → 4.8.20

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 (241) hide show
  1. package/.claude/guidance/shipped/moflo.md +45 -0
  2. package/.claude/helpers/statusline.cjs +1 -1
  3. package/.claude/workflow-state.json +9 -0
  4. package/package.json +2 -2
  5. package/src/@claude-flow/cli/dist/src/init/statusline-generator.js +1 -1
  6. package/src/@claude-flow/cli/dist/src/services/agentic-flow-bridge.js +5 -3
  7. package/src/@claude-flow/cli/package.json +1 -1
  8. package/src/@claude-flow/memory/dist/agent-memory-scope.d.ts +131 -0
  9. package/src/@claude-flow/memory/dist/agent-memory-scope.js +223 -0
  10. package/src/@claude-flow/memory/dist/agent-memory-scope.test.d.ts +8 -0
  11. package/src/@claude-flow/memory/dist/agent-memory-scope.test.js +466 -0
  12. package/src/@claude-flow/memory/dist/agentdb-adapter.d.ts +165 -0
  13. package/src/@claude-flow/memory/dist/agentdb-adapter.js +806 -0
  14. package/src/@claude-flow/memory/dist/agentdb-backend.d.ts +212 -0
  15. package/src/@claude-flow/memory/dist/agentdb-backend.js +842 -0
  16. package/src/@claude-flow/memory/dist/agentdb-backend.test.d.ts +7 -0
  17. package/src/@claude-flow/memory/dist/agentdb-backend.test.js +258 -0
  18. package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.d.ts +65 -0
  19. package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.js +129 -0
  20. package/src/@claude-flow/memory/dist/application/commands/store-memory.command.d.ts +48 -0
  21. package/src/@claude-flow/memory/dist/application/commands/store-memory.command.js +72 -0
  22. package/src/@claude-flow/memory/dist/application/index.d.ts +12 -0
  23. package/src/@claude-flow/memory/dist/application/index.js +15 -0
  24. package/src/@claude-flow/memory/dist/application/queries/search-memory.query.d.ts +72 -0
  25. package/src/@claude-flow/memory/dist/application/queries/search-memory.query.js +143 -0
  26. package/src/@claude-flow/memory/dist/application/services/memory-application-service.d.ts +121 -0
  27. package/src/@claude-flow/memory/dist/application/services/memory-application-service.js +190 -0
  28. package/src/@claude-flow/memory/dist/auto-memory-bridge.d.ts +226 -0
  29. package/src/@claude-flow/memory/dist/auto-memory-bridge.js +709 -0
  30. package/src/@claude-flow/memory/dist/auto-memory-bridge.test.d.ts +8 -0
  31. package/src/@claude-flow/memory/dist/auto-memory-bridge.test.js +757 -0
  32. package/src/@claude-flow/memory/dist/benchmark.test.d.ts +2 -0
  33. package/src/@claude-flow/memory/dist/benchmark.test.js +277 -0
  34. package/src/@claude-flow/memory/dist/cache-manager.d.ts +134 -0
  35. package/src/@claude-flow/memory/dist/cache-manager.js +407 -0
  36. package/src/@claude-flow/memory/dist/controller-registry.d.ts +216 -0
  37. package/src/@claude-flow/memory/dist/controller-registry.js +893 -0
  38. package/src/@claude-flow/memory/dist/controller-registry.test.d.ts +14 -0
  39. package/src/@claude-flow/memory/dist/controller-registry.test.js +593 -0
  40. package/src/@claude-flow/memory/dist/database-provider.d.ts +87 -0
  41. package/src/@claude-flow/memory/dist/database-provider.js +372 -0
  42. package/src/@claude-flow/memory/dist/database-provider.test.d.ts +7 -0
  43. package/src/@claude-flow/memory/dist/database-provider.test.js +287 -0
  44. package/src/@claude-flow/memory/dist/domain/entities/memory-entry.d.ts +143 -0
  45. package/src/@claude-flow/memory/dist/domain/entities/memory-entry.js +226 -0
  46. package/src/@claude-flow/memory/dist/domain/index.d.ts +11 -0
  47. package/src/@claude-flow/memory/dist/domain/index.js +12 -0
  48. package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.d.ts +102 -0
  49. package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.js +11 -0
  50. package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.d.ts +105 -0
  51. package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.js +297 -0
  52. package/src/@claude-flow/memory/dist/hnsw-index.d.ts +111 -0
  53. package/src/@claude-flow/memory/dist/hnsw-index.js +781 -0
  54. package/src/@claude-flow/memory/dist/hnsw-lite.d.ts +23 -0
  55. package/src/@claude-flow/memory/dist/hnsw-lite.js +168 -0
  56. package/src/@claude-flow/memory/dist/index.d.ts +204 -0
  57. package/src/@claude-flow/memory/dist/index.js +358 -0
  58. package/src/@claude-flow/memory/dist/infrastructure/index.d.ts +17 -0
  59. package/src/@claude-flow/memory/dist/infrastructure/index.js +16 -0
  60. package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.d.ts +66 -0
  61. package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.js +409 -0
  62. package/src/@claude-flow/memory/dist/learning-bridge.d.ts +137 -0
  63. package/src/@claude-flow/memory/dist/learning-bridge.js +335 -0
  64. package/src/@claude-flow/memory/dist/learning-bridge.test.d.ts +8 -0
  65. package/src/@claude-flow/memory/dist/learning-bridge.test.js +578 -0
  66. package/src/@claude-flow/memory/dist/memory-graph.d.ts +100 -0
  67. package/src/@claude-flow/memory/dist/memory-graph.js +333 -0
  68. package/src/@claude-flow/memory/dist/memory-graph.test.d.ts +8 -0
  69. package/src/@claude-flow/memory/dist/memory-graph.test.js +609 -0
  70. package/src/@claude-flow/memory/dist/migration.d.ts +68 -0
  71. package/src/@claude-flow/memory/dist/migration.js +513 -0
  72. package/src/@claude-flow/memory/dist/persistent-sona.d.ts +144 -0
  73. package/src/@claude-flow/memory/dist/persistent-sona.js +332 -0
  74. package/src/@claude-flow/memory/dist/query-builder.d.ts +211 -0
  75. package/src/@claude-flow/memory/dist/query-builder.js +438 -0
  76. package/src/@claude-flow/memory/dist/rvf-backend.d.ts +51 -0
  77. package/src/@claude-flow/memory/dist/rvf-backend.js +481 -0
  78. package/src/@claude-flow/memory/dist/rvf-learning-store.d.ts +139 -0
  79. package/src/@claude-flow/memory/dist/rvf-learning-store.js +295 -0
  80. package/src/@claude-flow/memory/dist/rvf-migration.d.ts +45 -0
  81. package/src/@claude-flow/memory/dist/rvf-migration.js +234 -0
  82. package/src/@claude-flow/memory/dist/sqljs-backend.d.ts +127 -0
  83. package/src/@claude-flow/memory/dist/sqljs-backend.js +600 -0
  84. package/src/@claude-flow/memory/dist/types.d.ts +484 -0
  85. package/src/@claude-flow/memory/dist/types.js +58 -0
  86. package/src/@claude-flow/shared/dist/core/config/defaults.d.ts +41 -0
  87. package/src/@claude-flow/shared/dist/core/config/defaults.js +186 -0
  88. package/src/@claude-flow/shared/dist/core/config/index.d.ts +8 -0
  89. package/src/@claude-flow/shared/dist/core/config/index.js +12 -0
  90. package/src/@claude-flow/shared/dist/core/config/loader.d.ts +45 -0
  91. package/src/@claude-flow/shared/dist/core/config/loader.js +222 -0
  92. package/src/@claude-flow/shared/dist/core/config/schema.d.ts +1134 -0
  93. package/src/@claude-flow/shared/dist/core/config/schema.js +158 -0
  94. package/src/@claude-flow/shared/dist/core/config/validator.d.ts +92 -0
  95. package/src/@claude-flow/shared/dist/core/config/validator.js +147 -0
  96. package/src/@claude-flow/shared/dist/core/event-bus.d.ts +31 -0
  97. package/src/@claude-flow/shared/dist/core/event-bus.js +197 -0
  98. package/src/@claude-flow/shared/dist/core/index.d.ts +15 -0
  99. package/src/@claude-flow/shared/dist/core/index.js +19 -0
  100. package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.d.ts +200 -0
  101. package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.js +6 -0
  102. package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.d.ts +310 -0
  103. package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.js +7 -0
  104. package/src/@claude-flow/shared/dist/core/interfaces/event.interface.d.ts +224 -0
  105. package/src/@claude-flow/shared/dist/core/interfaces/event.interface.js +46 -0
  106. package/src/@claude-flow/shared/dist/core/interfaces/index.d.ts +10 -0
  107. package/src/@claude-flow/shared/dist/core/interfaces/index.js +15 -0
  108. package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.d.ts +298 -0
  109. package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.js +7 -0
  110. package/src/@claude-flow/shared/dist/core/interfaces/task.interface.d.ts +185 -0
  111. package/src/@claude-flow/shared/dist/core/interfaces/task.interface.js +6 -0
  112. package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.d.ts +35 -0
  113. package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.js +101 -0
  114. package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.d.ts +60 -0
  115. package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.js +166 -0
  116. package/src/@claude-flow/shared/dist/core/orchestrator/index.d.ts +46 -0
  117. package/src/@claude-flow/shared/dist/core/orchestrator/index.js +64 -0
  118. package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.d.ts +56 -0
  119. package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.js +195 -0
  120. package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.d.ts +83 -0
  121. package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.js +193 -0
  122. package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.d.ts +49 -0
  123. package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.js +253 -0
  124. package/src/@claude-flow/shared/dist/events/domain-events.d.ts +282 -0
  125. package/src/@claude-flow/shared/dist/events/domain-events.js +165 -0
  126. package/src/@claude-flow/shared/dist/events/event-store.d.ts +126 -0
  127. package/src/@claude-flow/shared/dist/events/event-store.js +432 -0
  128. package/src/@claude-flow/shared/dist/events/event-store.test.d.ts +8 -0
  129. package/src/@claude-flow/shared/dist/events/event-store.test.js +297 -0
  130. package/src/@claude-flow/shared/dist/events/example-usage.d.ts +10 -0
  131. package/src/@claude-flow/shared/dist/events/example-usage.js +193 -0
  132. package/src/@claude-flow/shared/dist/events/index.d.ts +21 -0
  133. package/src/@claude-flow/shared/dist/events/index.js +22 -0
  134. package/src/@claude-flow/shared/dist/events/projections.d.ts +177 -0
  135. package/src/@claude-flow/shared/dist/events/projections.js +421 -0
  136. package/src/@claude-flow/shared/dist/events/rvf-event-log.d.ts +82 -0
  137. package/src/@claude-flow/shared/dist/events/rvf-event-log.js +340 -0
  138. package/src/@claude-flow/shared/dist/events/state-reconstructor.d.ts +101 -0
  139. package/src/@claude-flow/shared/dist/events/state-reconstructor.js +263 -0
  140. package/src/@claude-flow/shared/dist/events.d.ts +80 -0
  141. package/src/@claude-flow/shared/dist/events.js +249 -0
  142. package/src/@claude-flow/shared/dist/hooks/example-usage.d.ts +42 -0
  143. package/src/@claude-flow/shared/dist/hooks/example-usage.js +351 -0
  144. package/src/@claude-flow/shared/dist/hooks/executor.d.ts +100 -0
  145. package/src/@claude-flow/shared/dist/hooks/executor.js +267 -0
  146. package/src/@claude-flow/shared/dist/hooks/hooks.test.d.ts +9 -0
  147. package/src/@claude-flow/shared/dist/hooks/hooks.test.js +322 -0
  148. package/src/@claude-flow/shared/dist/hooks/index.d.ts +52 -0
  149. package/src/@claude-flow/shared/dist/hooks/index.js +51 -0
  150. package/src/@claude-flow/shared/dist/hooks/registry.d.ts +133 -0
  151. package/src/@claude-flow/shared/dist/hooks/registry.js +277 -0
  152. package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.d.ts +105 -0
  153. package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.js +481 -0
  154. package/src/@claude-flow/shared/dist/hooks/safety/file-organization.d.ts +144 -0
  155. package/src/@claude-flow/shared/dist/hooks/safety/file-organization.js +328 -0
  156. package/src/@claude-flow/shared/dist/hooks/safety/git-commit.d.ts +158 -0
  157. package/src/@claude-flow/shared/dist/hooks/safety/git-commit.js +450 -0
  158. package/src/@claude-flow/shared/dist/hooks/safety/index.d.ts +17 -0
  159. package/src/@claude-flow/shared/dist/hooks/safety/index.js +17 -0
  160. package/src/@claude-flow/shared/dist/hooks/session-hooks.d.ts +234 -0
  161. package/src/@claude-flow/shared/dist/hooks/session-hooks.js +334 -0
  162. package/src/@claude-flow/shared/dist/hooks/task-hooks.d.ts +163 -0
  163. package/src/@claude-flow/shared/dist/hooks/task-hooks.js +326 -0
  164. package/src/@claude-flow/shared/dist/hooks/types.d.ts +267 -0
  165. package/src/@claude-flow/shared/dist/hooks/types.js +62 -0
  166. package/src/@claude-flow/shared/dist/hooks/verify-exports.test.d.ts +9 -0
  167. package/src/@claude-flow/shared/dist/hooks/verify-exports.test.js +93 -0
  168. package/src/@claude-flow/shared/dist/index.d.ts +20 -0
  169. package/src/@claude-flow/shared/dist/index.js +50 -0
  170. package/src/@claude-flow/shared/dist/mcp/connection-pool.d.ts +98 -0
  171. package/src/@claude-flow/shared/dist/mcp/connection-pool.js +364 -0
  172. package/src/@claude-flow/shared/dist/mcp/index.d.ts +69 -0
  173. package/src/@claude-flow/shared/dist/mcp/index.js +84 -0
  174. package/src/@claude-flow/shared/dist/mcp/server.d.ts +166 -0
  175. package/src/@claude-flow/shared/dist/mcp/server.js +593 -0
  176. package/src/@claude-flow/shared/dist/mcp/session-manager.d.ts +136 -0
  177. package/src/@claude-flow/shared/dist/mcp/session-manager.js +335 -0
  178. package/src/@claude-flow/shared/dist/mcp/tool-registry.d.ts +178 -0
  179. package/src/@claude-flow/shared/dist/mcp/tool-registry.js +439 -0
  180. package/src/@claude-flow/shared/dist/mcp/transport/http.d.ts +104 -0
  181. package/src/@claude-flow/shared/dist/mcp/transport/http.js +476 -0
  182. package/src/@claude-flow/shared/dist/mcp/transport/index.d.ts +102 -0
  183. package/src/@claude-flow/shared/dist/mcp/transport/index.js +238 -0
  184. package/src/@claude-flow/shared/dist/mcp/transport/stdio.d.ts +104 -0
  185. package/src/@claude-flow/shared/dist/mcp/transport/stdio.js +263 -0
  186. package/src/@claude-flow/shared/dist/mcp/transport/websocket.d.ts +133 -0
  187. package/src/@claude-flow/shared/dist/mcp/transport/websocket.js +396 -0
  188. package/src/@claude-flow/shared/dist/mcp/types.d.ts +438 -0
  189. package/src/@claude-flow/shared/dist/mcp/types.js +54 -0
  190. package/src/@claude-flow/shared/dist/plugin-interface.d.ts +544 -0
  191. package/src/@claude-flow/shared/dist/plugin-interface.js +23 -0
  192. package/src/@claude-flow/shared/dist/plugin-loader.d.ts +139 -0
  193. package/src/@claude-flow/shared/dist/plugin-loader.js +434 -0
  194. package/src/@claude-flow/shared/dist/plugin-registry.d.ts +183 -0
  195. package/src/@claude-flow/shared/dist/plugin-registry.js +457 -0
  196. package/src/@claude-flow/shared/dist/plugins/index.d.ts +10 -0
  197. package/src/@claude-flow/shared/dist/plugins/index.js +10 -0
  198. package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.d.ts +106 -0
  199. package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.js +241 -0
  200. package/src/@claude-flow/shared/dist/plugins/official/index.d.ts +10 -0
  201. package/src/@claude-flow/shared/dist/plugins/official/index.js +10 -0
  202. package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.d.ts +121 -0
  203. package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.js +355 -0
  204. package/src/@claude-flow/shared/dist/plugins/types.d.ts +93 -0
  205. package/src/@claude-flow/shared/dist/plugins/types.js +9 -0
  206. package/src/@claude-flow/shared/dist/resilience/bulkhead.d.ts +105 -0
  207. package/src/@claude-flow/shared/dist/resilience/bulkhead.js +206 -0
  208. package/src/@claude-flow/shared/dist/resilience/circuit-breaker.d.ts +132 -0
  209. package/src/@claude-flow/shared/dist/resilience/circuit-breaker.js +233 -0
  210. package/src/@claude-flow/shared/dist/resilience/index.d.ts +19 -0
  211. package/src/@claude-flow/shared/dist/resilience/index.js +19 -0
  212. package/src/@claude-flow/shared/dist/resilience/rate-limiter.d.ts +168 -0
  213. package/src/@claude-flow/shared/dist/resilience/rate-limiter.js +314 -0
  214. package/src/@claude-flow/shared/dist/resilience/retry.d.ts +91 -0
  215. package/src/@claude-flow/shared/dist/resilience/retry.js +159 -0
  216. package/src/@claude-flow/shared/dist/security/index.d.ts +10 -0
  217. package/src/@claude-flow/shared/dist/security/index.js +12 -0
  218. package/src/@claude-flow/shared/dist/security/input-validation.d.ts +73 -0
  219. package/src/@claude-flow/shared/dist/security/input-validation.js +201 -0
  220. package/src/@claude-flow/shared/dist/security/secure-random.d.ts +92 -0
  221. package/src/@claude-flow/shared/dist/security/secure-random.js +142 -0
  222. package/src/@claude-flow/shared/dist/services/index.d.ts +7 -0
  223. package/src/@claude-flow/shared/dist/services/index.js +7 -0
  224. package/src/@claude-flow/shared/dist/services/v3-progress.service.d.ts +124 -0
  225. package/src/@claude-flow/shared/dist/services/v3-progress.service.js +402 -0
  226. package/src/@claude-flow/shared/dist/types/agent.types.d.ts +137 -0
  227. package/src/@claude-flow/shared/dist/types/agent.types.js +6 -0
  228. package/src/@claude-flow/shared/dist/types/index.d.ts +11 -0
  229. package/src/@claude-flow/shared/dist/types/index.js +17 -0
  230. package/src/@claude-flow/shared/dist/types/mcp.types.d.ts +266 -0
  231. package/src/@claude-flow/shared/dist/types/mcp.types.js +7 -0
  232. package/src/@claude-flow/shared/dist/types/memory.types.d.ts +236 -0
  233. package/src/@claude-flow/shared/dist/types/memory.types.js +7 -0
  234. package/src/@claude-flow/shared/dist/types/swarm.types.d.ts +186 -0
  235. package/src/@claude-flow/shared/dist/types/swarm.types.js +65 -0
  236. package/src/@claude-flow/shared/dist/types/task.types.d.ts +178 -0
  237. package/src/@claude-flow/shared/dist/types/task.types.js +32 -0
  238. package/src/@claude-flow/shared/dist/types.d.ts +197 -0
  239. package/src/@claude-flow/shared/dist/types.js +21 -0
  240. package/src/@claude-flow/shared/dist/utils/secure-logger.d.ts +69 -0
  241. package/src/@claude-flow/shared/dist/utils/secure-logger.js +208 -0
@@ -0,0 +1,593 @@
1
+ /**
2
+ * V3 MCP Server Implementation
3
+ *
4
+ * Optimized MCP server with:
5
+ * - Connection pooling for efficient resource usage
6
+ * - Fast tool registration (<10ms)
7
+ * - Optimized request routing (<50ms overhead)
8
+ * - Multiple transport support (stdio, http, websocket, in-process)
9
+ * - Session management with timeout handling
10
+ * - Comprehensive metrics and monitoring
11
+ *
12
+ * Performance Targets:
13
+ * - Server startup: <400ms
14
+ * - Tool registration: <10ms
15
+ * - Tool execution: <50ms overhead
16
+ */
17
+ import { EventEmitter } from 'events';
18
+ import { platform, arch } from 'os';
19
+ import { MCPServerError, ErrorCodes, } from './types.js';
20
+ import { createToolRegistry } from './tool-registry.js';
21
+ import { createSessionManager } from './session-manager.js';
22
+ import { createConnectionPool } from './connection-pool.js';
23
+ import { createTransport, createTransportManager } from './transport/index.js';
24
+ /**
25
+ * Default server configuration
26
+ */
27
+ const DEFAULT_CONFIG = {
28
+ name: 'Claude-Flow MCP Server V3',
29
+ version: '3.0.0',
30
+ transport: 'stdio',
31
+ host: 'localhost',
32
+ port: 3000,
33
+ enableMetrics: true,
34
+ enableCaching: true,
35
+ cacheTTL: 10000,
36
+ logLevel: 'info',
37
+ requestTimeout: 30000,
38
+ maxRequestSize: 10 * 1024 * 1024,
39
+ };
40
+ /**
41
+ * V3 MCP Server
42
+ */
43
+ export class MCPServer extends EventEmitter {
44
+ logger;
45
+ orchestrator;
46
+ swarmCoordinator;
47
+ config;
48
+ toolRegistry;
49
+ sessionManager;
50
+ connectionPool;
51
+ transportManager;
52
+ transport;
53
+ running = false;
54
+ startTime;
55
+ startupDuration;
56
+ currentSession;
57
+ // Server information
58
+ serverInfo = {
59
+ name: 'Claude-Flow MCP Server V3',
60
+ version: '3.0.0',
61
+ };
62
+ // Protocol version
63
+ protocolVersion = {
64
+ major: 2024,
65
+ minor: 11,
66
+ patch: 5,
67
+ };
68
+ // Server capabilities
69
+ capabilities = {
70
+ logging: { level: 'info' },
71
+ tools: { listChanged: true },
72
+ resources: { listChanged: false, subscribe: false },
73
+ prompts: { listChanged: false },
74
+ };
75
+ // Request statistics
76
+ requestStats = {
77
+ total: 0,
78
+ successful: 0,
79
+ failed: 0,
80
+ totalResponseTime: 0,
81
+ };
82
+ constructor(config, logger, orchestrator, swarmCoordinator) {
83
+ super();
84
+ this.logger = logger;
85
+ this.orchestrator = orchestrator;
86
+ this.swarmCoordinator = swarmCoordinator;
87
+ this.config = { ...DEFAULT_CONFIG, ...config };
88
+ // Initialize components
89
+ this.toolRegistry = createToolRegistry(logger);
90
+ this.sessionManager = createSessionManager(logger, {
91
+ maxSessions: 100,
92
+ sessionTimeout: 30 * 60 * 1000,
93
+ });
94
+ this.transportManager = createTransportManager(logger);
95
+ // Initialize connection pool if enabled
96
+ if (this.config.connectionPool) {
97
+ this.connectionPool = createConnectionPool(this.config.connectionPool, logger, this.config.transport);
98
+ }
99
+ // Setup event handlers
100
+ this.setupEventHandlers();
101
+ }
102
+ /**
103
+ * Start the MCP server
104
+ */
105
+ async start() {
106
+ if (this.running) {
107
+ throw new MCPServerError('Server already running');
108
+ }
109
+ const startTime = performance.now();
110
+ this.startTime = new Date();
111
+ this.logger.info('Starting MCP server', {
112
+ name: this.config.name,
113
+ version: this.config.version,
114
+ transport: this.config.transport,
115
+ });
116
+ try {
117
+ // Create and start transport
118
+ this.transport = createTransport(this.config.transport, this.logger, {
119
+ type: this.config.transport,
120
+ host: this.config.host,
121
+ port: this.config.port,
122
+ corsEnabled: this.config.corsEnabled,
123
+ corsOrigins: this.config.corsOrigins,
124
+ auth: this.config.auth,
125
+ maxRequestSize: String(this.config.maxRequestSize),
126
+ requestTimeout: this.config.requestTimeout,
127
+ });
128
+ // Setup request handler
129
+ this.transport.onRequest(async (request) => {
130
+ return await this.handleRequest(request);
131
+ });
132
+ // Setup notification handler
133
+ this.transport.onNotification(async (notification) => {
134
+ await this.handleNotification(notification);
135
+ });
136
+ // Start transport
137
+ await this.transport.start();
138
+ // Register built-in tools
139
+ await this.registerBuiltInTools();
140
+ this.running = true;
141
+ this.startupDuration = performance.now() - startTime;
142
+ this.logger.info('MCP server started', {
143
+ startupTime: `${this.startupDuration.toFixed(2)}ms`,
144
+ tools: this.toolRegistry.getToolCount(),
145
+ });
146
+ this.emit('server:started', {
147
+ startupTime: this.startupDuration,
148
+ tools: this.toolRegistry.getToolCount(),
149
+ });
150
+ }
151
+ catch (error) {
152
+ this.logger.error('Failed to start MCP server', { error });
153
+ throw new MCPServerError('Failed to start server', ErrorCodes.INTERNAL_ERROR, { error });
154
+ }
155
+ }
156
+ /**
157
+ * Stop the MCP server
158
+ */
159
+ async stop() {
160
+ if (!this.running) {
161
+ return;
162
+ }
163
+ this.logger.info('Stopping MCP server');
164
+ try {
165
+ // Stop transport
166
+ if (this.transport) {
167
+ await this.transport.stop();
168
+ this.transport = undefined;
169
+ }
170
+ // Clear sessions
171
+ this.sessionManager.clearAll();
172
+ // Clear connection pool
173
+ if (this.connectionPool) {
174
+ await this.connectionPool.clear();
175
+ }
176
+ this.running = false;
177
+ this.currentSession = undefined;
178
+ this.logger.info('MCP server stopped');
179
+ this.emit('server:stopped');
180
+ }
181
+ catch (error) {
182
+ this.logger.error('Error stopping MCP server', { error });
183
+ throw error;
184
+ }
185
+ }
186
+ /**
187
+ * Register a tool
188
+ */
189
+ registerTool(tool) {
190
+ return this.toolRegistry.register(tool);
191
+ }
192
+ /**
193
+ * Register multiple tools
194
+ */
195
+ registerTools(tools) {
196
+ return this.toolRegistry.registerBatch(tools);
197
+ }
198
+ /**
199
+ * Unregister a tool
200
+ */
201
+ unregisterTool(name) {
202
+ return this.toolRegistry.unregister(name);
203
+ }
204
+ /**
205
+ * Get health status
206
+ */
207
+ async getHealthStatus() {
208
+ try {
209
+ const transportHealth = this.transport
210
+ ? await this.transport.getHealthStatus()
211
+ : { healthy: false, error: 'Transport not initialized' };
212
+ const sessionMetrics = this.sessionManager.getSessionMetrics();
213
+ const poolStats = this.connectionPool?.getStats();
214
+ const metrics = {
215
+ registeredTools: this.toolRegistry.getToolCount(),
216
+ totalRequests: this.requestStats.total,
217
+ successfulRequests: this.requestStats.successful,
218
+ failedRequests: this.requestStats.failed,
219
+ totalSessions: sessionMetrics.total,
220
+ activeSessions: sessionMetrics.active,
221
+ ...(transportHealth.metrics || {}),
222
+ };
223
+ if (poolStats) {
224
+ metrics.poolConnections = poolStats.totalConnections;
225
+ metrics.poolIdleConnections = poolStats.idleConnections;
226
+ metrics.poolBusyConnections = poolStats.busyConnections;
227
+ }
228
+ return {
229
+ healthy: this.running && transportHealth.healthy,
230
+ error: transportHealth.error,
231
+ metrics,
232
+ };
233
+ }
234
+ catch (error) {
235
+ return {
236
+ healthy: false,
237
+ error: error instanceof Error ? error.message : 'Unknown error',
238
+ };
239
+ }
240
+ }
241
+ /**
242
+ * Get server metrics
243
+ */
244
+ getMetrics() {
245
+ const sessionMetrics = this.sessionManager.getSessionMetrics();
246
+ const registryStats = this.toolRegistry.getStats();
247
+ return {
248
+ totalRequests: this.requestStats.total,
249
+ successfulRequests: this.requestStats.successful,
250
+ failedRequests: this.requestStats.failed,
251
+ averageResponseTime: this.requestStats.total > 0
252
+ ? this.requestStats.totalResponseTime / this.requestStats.total
253
+ : 0,
254
+ activeSessions: sessionMetrics.active,
255
+ toolInvocations: Object.fromEntries(registryStats.topTools.map((t) => [t.name, t.calls])),
256
+ errors: {},
257
+ lastReset: this.startTime || new Date(),
258
+ startupTime: this.startupDuration,
259
+ uptime: this.startTime ? Date.now() - this.startTime.getTime() : 0,
260
+ };
261
+ }
262
+ /**
263
+ * Get all sessions
264
+ */
265
+ getSessions() {
266
+ return this.sessionManager.getActiveSessions();
267
+ }
268
+ /**
269
+ * Get session by ID
270
+ */
271
+ getSession(sessionId) {
272
+ return this.sessionManager.getSession(sessionId);
273
+ }
274
+ /**
275
+ * Terminate a session
276
+ */
277
+ terminateSession(sessionId) {
278
+ const result = this.sessionManager.closeSession(sessionId, 'Terminated by server');
279
+ if (this.currentSession?.id === sessionId) {
280
+ this.currentSession = undefined;
281
+ }
282
+ return result;
283
+ }
284
+ /**
285
+ * Handle incoming request
286
+ */
287
+ async handleRequest(request) {
288
+ const startTime = performance.now();
289
+ this.requestStats.total++;
290
+ this.logger.debug('Handling request', {
291
+ id: request.id,
292
+ method: request.method,
293
+ });
294
+ try {
295
+ // Handle initialization
296
+ if (request.method === 'initialize') {
297
+ return await this.handleInitialize(request);
298
+ }
299
+ // Get or create session
300
+ const session = this.getOrCreateSession();
301
+ // Check initialization
302
+ if (!session.isInitialized && request.method !== 'initialized') {
303
+ return this.createErrorResponse(request.id, ErrorCodes.SERVER_NOT_INITIALIZED, 'Server not initialized');
304
+ }
305
+ // Update session activity
306
+ this.sessionManager.updateActivity(session.id);
307
+ // Route request
308
+ const response = await this.routeRequest(request);
309
+ const duration = performance.now() - startTime;
310
+ this.requestStats.successful++;
311
+ this.requestStats.totalResponseTime += duration;
312
+ this.logger.debug('Request completed', {
313
+ id: request.id,
314
+ method: request.method,
315
+ duration: `${duration.toFixed(2)}ms`,
316
+ });
317
+ return response;
318
+ }
319
+ catch (error) {
320
+ const duration = performance.now() - startTime;
321
+ this.requestStats.failed++;
322
+ this.requestStats.totalResponseTime += duration;
323
+ this.logger.error('Request failed', {
324
+ id: request.id,
325
+ method: request.method,
326
+ error,
327
+ });
328
+ return this.createErrorResponse(request.id, ErrorCodes.INTERNAL_ERROR, error instanceof Error ? error.message : 'Internal error');
329
+ }
330
+ }
331
+ /**
332
+ * Handle notification
333
+ */
334
+ async handleNotification(notification) {
335
+ this.logger.debug('Handling notification', { method: notification.method });
336
+ switch (notification.method) {
337
+ case 'initialized':
338
+ this.logger.info('Client initialized notification received');
339
+ break;
340
+ case 'notifications/cancelled':
341
+ this.logger.debug('Request cancelled', notification.params);
342
+ break;
343
+ default:
344
+ this.logger.debug('Unknown notification', { method: notification.method });
345
+ }
346
+ }
347
+ /**
348
+ * Handle initialize request
349
+ */
350
+ async handleInitialize(request) {
351
+ const params = request.params;
352
+ if (!params) {
353
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Invalid params');
354
+ }
355
+ // Create and initialize session
356
+ const session = this.sessionManager.createSession(this.config.transport);
357
+ this.sessionManager.initializeSession(session.id, params);
358
+ this.currentSession = session;
359
+ const result = {
360
+ protocolVersion: this.protocolVersion,
361
+ capabilities: this.capabilities,
362
+ serverInfo: this.serverInfo,
363
+ instructions: 'Claude-Flow MCP Server V3 ready for tool execution',
364
+ };
365
+ this.logger.info('Session initialized', {
366
+ sessionId: session.id,
367
+ clientInfo: params.clientInfo,
368
+ });
369
+ return {
370
+ jsonrpc: '2.0',
371
+ id: request.id,
372
+ result,
373
+ };
374
+ }
375
+ /**
376
+ * Route request to appropriate handler
377
+ */
378
+ async routeRequest(request) {
379
+ switch (request.method) {
380
+ case 'tools/list':
381
+ return this.handleToolsList(request);
382
+ case 'tools/call':
383
+ return this.handleToolsCall(request);
384
+ case 'resources/list':
385
+ return this.handleResourcesList(request);
386
+ case 'prompts/list':
387
+ return this.handlePromptsList(request);
388
+ case 'ping':
389
+ return {
390
+ jsonrpc: '2.0',
391
+ id: request.id,
392
+ result: { pong: true, timestamp: Date.now() },
393
+ };
394
+ default:
395
+ // Try to execute as tool call (backwards compatibility)
396
+ if (this.toolRegistry.hasTool(request.method)) {
397
+ return this.handleToolExecution(request);
398
+ }
399
+ return this.createErrorResponse(request.id, ErrorCodes.METHOD_NOT_FOUND, `Method not found: ${request.method}`);
400
+ }
401
+ }
402
+ /**
403
+ * Handle tools/list request
404
+ */
405
+ handleToolsList(request) {
406
+ const tools = this.toolRegistry.listTools().map((t) => ({
407
+ name: t.name,
408
+ description: t.description,
409
+ inputSchema: this.toolRegistry.getTool(t.name)?.inputSchema,
410
+ }));
411
+ return {
412
+ jsonrpc: '2.0',
413
+ id: request.id,
414
+ result: { tools },
415
+ };
416
+ }
417
+ /**
418
+ * Handle tools/call request
419
+ */
420
+ async handleToolsCall(request) {
421
+ const params = request.params;
422
+ if (!params?.name) {
423
+ return this.createErrorResponse(request.id, ErrorCodes.INVALID_PARAMS, 'Tool name is required');
424
+ }
425
+ const context = {
426
+ sessionId: this.currentSession?.id || 'unknown',
427
+ requestId: request.id,
428
+ orchestrator: this.orchestrator,
429
+ swarmCoordinator: this.swarmCoordinator,
430
+ };
431
+ const result = await this.toolRegistry.execute(params.name, params.arguments || {}, context);
432
+ return {
433
+ jsonrpc: '2.0',
434
+ id: request.id,
435
+ result,
436
+ };
437
+ }
438
+ /**
439
+ * Handle direct tool execution (backwards compatibility)
440
+ */
441
+ async handleToolExecution(request) {
442
+ const context = {
443
+ sessionId: this.currentSession?.id || 'unknown',
444
+ requestId: request.id,
445
+ orchestrator: this.orchestrator,
446
+ swarmCoordinator: this.swarmCoordinator,
447
+ };
448
+ const result = await this.toolRegistry.execute(request.method, request.params || {}, context);
449
+ return {
450
+ jsonrpc: '2.0',
451
+ id: request.id,
452
+ result,
453
+ };
454
+ }
455
+ /**
456
+ * Handle resources/list request
457
+ */
458
+ handleResourcesList(request) {
459
+ return {
460
+ jsonrpc: '2.0',
461
+ id: request.id,
462
+ result: { resources: [] },
463
+ };
464
+ }
465
+ /**
466
+ * Handle prompts/list request
467
+ */
468
+ handlePromptsList(request) {
469
+ return {
470
+ jsonrpc: '2.0',
471
+ id: request.id,
472
+ result: { prompts: [] },
473
+ };
474
+ }
475
+ /**
476
+ * Get or create current session
477
+ */
478
+ getOrCreateSession() {
479
+ if (this.currentSession) {
480
+ return this.currentSession;
481
+ }
482
+ const session = this.sessionManager.createSession(this.config.transport);
483
+ this.currentSession = session;
484
+ return session;
485
+ }
486
+ /**
487
+ * Create error response
488
+ */
489
+ createErrorResponse(id, code, message) {
490
+ return {
491
+ jsonrpc: '2.0',
492
+ id,
493
+ error: { code, message },
494
+ };
495
+ }
496
+ /**
497
+ * Register built-in tools
498
+ */
499
+ async registerBuiltInTools() {
500
+ // System info tool
501
+ this.registerTool({
502
+ name: 'system/info',
503
+ description: 'Get system information',
504
+ inputSchema: { type: 'object', properties: {} },
505
+ handler: async () => ({
506
+ name: this.serverInfo.name,
507
+ version: this.serverInfo.version,
508
+ platform: platform(),
509
+ arch: arch(),
510
+ runtime: 'Node.js',
511
+ uptime: this.startTime ? Date.now() - this.startTime.getTime() : 0,
512
+ }),
513
+ category: 'system',
514
+ });
515
+ // Health check tool
516
+ this.registerTool({
517
+ name: 'system/health',
518
+ description: 'Get system health status',
519
+ inputSchema: { type: 'object', properties: {} },
520
+ handler: async () => await this.getHealthStatus(),
521
+ category: 'system',
522
+ cacheable: true,
523
+ cacheTTL: 2000,
524
+ });
525
+ // Metrics tool
526
+ this.registerTool({
527
+ name: 'system/metrics',
528
+ description: 'Get server metrics',
529
+ inputSchema: { type: 'object', properties: {} },
530
+ handler: async () => this.getMetrics(),
531
+ category: 'system',
532
+ cacheable: true,
533
+ cacheTTL: 1000,
534
+ });
535
+ // Tools list tool
536
+ this.registerTool({
537
+ name: 'tools/list-detailed',
538
+ description: 'List all registered tools with details',
539
+ inputSchema: {
540
+ type: 'object',
541
+ properties: {
542
+ category: { type: 'string', description: 'Filter by category' },
543
+ },
544
+ },
545
+ handler: async (input) => {
546
+ const params = input;
547
+ if (params.category) {
548
+ return this.toolRegistry.getByCategory(params.category);
549
+ }
550
+ return this.toolRegistry.listTools();
551
+ },
552
+ category: 'system',
553
+ });
554
+ this.logger.info('Built-in tools registered', {
555
+ count: 4,
556
+ });
557
+ }
558
+ /**
559
+ * Setup event handlers
560
+ */
561
+ setupEventHandlers() {
562
+ // Tool events
563
+ this.toolRegistry.on('tool:registered', (name) => {
564
+ this.emit('tool:registered', name);
565
+ });
566
+ this.toolRegistry.on('tool:called', (data) => {
567
+ this.emit('tool:called', data);
568
+ });
569
+ this.toolRegistry.on('tool:completed', (data) => {
570
+ this.emit('tool:completed', data);
571
+ });
572
+ this.toolRegistry.on('tool:error', (data) => {
573
+ this.emit('tool:error', data);
574
+ });
575
+ // Session events
576
+ this.sessionManager.on('session:created', (session) => {
577
+ this.emit('session:created', session);
578
+ });
579
+ this.sessionManager.on('session:closed', (data) => {
580
+ this.emit('session:closed', data);
581
+ });
582
+ this.sessionManager.on('session:expired', (session) => {
583
+ this.emit('session:expired', session);
584
+ });
585
+ }
586
+ }
587
+ /**
588
+ * Create an MCP server instance
589
+ */
590
+ export function createMCPServer(config, logger, orchestrator, swarmCoordinator) {
591
+ return new MCPServer(config, logger, orchestrator, swarmCoordinator);
592
+ }
593
+ //# sourceMappingURL=server.js.map