claude-mpm 3.9.9__py3-none-any.whl → 4.0.3__py3-none-any.whl

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 (411) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +2 -2
  3. claude_mpm/__main__.py +3 -2
  4. claude_mpm/agents/__init__.py +85 -79
  5. claude_mpm/agents/agent_loader.py +464 -1003
  6. claude_mpm/agents/agent_loader_integration.py +45 -45
  7. claude_mpm/agents/agents_metadata.py +29 -30
  8. claude_mpm/agents/async_agent_loader.py +156 -138
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/base_agent_loader.py +179 -151
  11. claude_mpm/agents/frontmatter_validator.py +229 -130
  12. claude_mpm/agents/schema/agent_schema.json +1 -1
  13. claude_mpm/agents/system_agent_config.py +213 -147
  14. claude_mpm/agents/templates/__init__.py +13 -13
  15. claude_mpm/agents/templates/code_analyzer.json +2 -2
  16. claude_mpm/agents/templates/data_engineer.json +1 -1
  17. claude_mpm/agents/templates/documentation.json +23 -11
  18. claude_mpm/agents/templates/engineer.json +22 -6
  19. claude_mpm/agents/templates/memory_manager.json +155 -0
  20. claude_mpm/agents/templates/ops.json +2 -2
  21. claude_mpm/agents/templates/project_organizer.json +1 -1
  22. claude_mpm/agents/templates/qa.json +1 -1
  23. claude_mpm/agents/templates/refactoring_engineer.json +222 -0
  24. claude_mpm/agents/templates/research.json +20 -14
  25. claude_mpm/agents/templates/security.json +1 -1
  26. claude_mpm/agents/templates/ticketing.json +1 -1
  27. claude_mpm/agents/templates/version_control.json +1 -1
  28. claude_mpm/agents/templates/web_qa.json +3 -1
  29. claude_mpm/agents/templates/web_ui.json +2 -2
  30. claude_mpm/cli/__init__.py +90 -49
  31. claude_mpm/cli/__main__.py +3 -2
  32. claude_mpm/cli/commands/__init__.py +21 -18
  33. claude_mpm/cli/commands/agents.py +279 -247
  34. claude_mpm/cli/commands/aggregate.py +138 -157
  35. claude_mpm/cli/commands/cleanup.py +147 -147
  36. claude_mpm/cli/commands/config.py +93 -76
  37. claude_mpm/cli/commands/info.py +17 -16
  38. claude_mpm/cli/commands/mcp.py +143 -762
  39. claude_mpm/cli/commands/mcp_command_router.py +139 -0
  40. claude_mpm/cli/commands/mcp_config_commands.py +20 -0
  41. claude_mpm/cli/commands/mcp_install_commands.py +20 -0
  42. claude_mpm/cli/commands/mcp_server_commands.py +175 -0
  43. claude_mpm/cli/commands/mcp_tool_commands.py +34 -0
  44. claude_mpm/cli/commands/memory.py +239 -203
  45. claude_mpm/cli/commands/monitor.py +203 -81
  46. claude_mpm/cli/commands/run.py +380 -429
  47. claude_mpm/cli/commands/run_config_checker.py +160 -0
  48. claude_mpm/cli/commands/socketio_monitor.py +235 -0
  49. claude_mpm/cli/commands/tickets.py +305 -197
  50. claude_mpm/cli/parser.py +24 -1150
  51. claude_mpm/cli/parsers/__init__.py +29 -0
  52. claude_mpm/cli/parsers/agents_parser.py +136 -0
  53. claude_mpm/cli/parsers/base_parser.py +331 -0
  54. claude_mpm/cli/parsers/config_parser.py +85 -0
  55. claude_mpm/cli/parsers/mcp_parser.py +152 -0
  56. claude_mpm/cli/parsers/memory_parser.py +138 -0
  57. claude_mpm/cli/parsers/monitor_parser.py +104 -0
  58. claude_mpm/cli/parsers/run_parser.py +147 -0
  59. claude_mpm/cli/parsers/tickets_parser.py +203 -0
  60. claude_mpm/cli/ticket_cli.py +7 -3
  61. claude_mpm/cli/utils.py +55 -37
  62. claude_mpm/cli_module/__init__.py +6 -6
  63. claude_mpm/cli_module/args.py +188 -140
  64. claude_mpm/cli_module/commands.py +79 -70
  65. claude_mpm/cli_module/migration_example.py +38 -60
  66. claude_mpm/config/__init__.py +32 -25
  67. claude_mpm/config/agent_config.py +151 -119
  68. claude_mpm/config/experimental_features.py +217 -0
  69. claude_mpm/config/paths.py +94 -208
  70. claude_mpm/config/socketio_config.py +84 -73
  71. claude_mpm/constants.py +36 -18
  72. claude_mpm/core/__init__.py +9 -6
  73. claude_mpm/core/agent_name_normalizer.py +68 -71
  74. claude_mpm/core/agent_registry.py +372 -521
  75. claude_mpm/core/agent_session_manager.py +74 -63
  76. claude_mpm/core/base_service.py +116 -87
  77. claude_mpm/core/cache.py +119 -153
  78. claude_mpm/core/claude_runner.py +425 -1120
  79. claude_mpm/core/config.py +263 -168
  80. claude_mpm/core/config_aliases.py +69 -61
  81. claude_mpm/core/config_constants.py +292 -0
  82. claude_mpm/core/constants.py +57 -99
  83. claude_mpm/core/container.py +211 -178
  84. claude_mpm/core/exceptions.py +233 -89
  85. claude_mpm/core/factories.py +92 -54
  86. claude_mpm/core/framework_loader.py +378 -220
  87. claude_mpm/core/hook_manager.py +198 -83
  88. claude_mpm/core/hook_performance_config.py +136 -0
  89. claude_mpm/core/injectable_service.py +61 -55
  90. claude_mpm/core/interactive_session.py +165 -155
  91. claude_mpm/core/interfaces.py +221 -195
  92. claude_mpm/core/lazy.py +96 -96
  93. claude_mpm/core/logger.py +133 -107
  94. claude_mpm/core/logging_config.py +185 -157
  95. claude_mpm/core/minimal_framework_loader.py +20 -15
  96. claude_mpm/core/mixins.py +30 -29
  97. claude_mpm/core/oneshot_session.py +215 -181
  98. claude_mpm/core/optimized_agent_loader.py +134 -138
  99. claude_mpm/core/optimized_startup.py +159 -157
  100. claude_mpm/core/pm_hook_interceptor.py +85 -72
  101. claude_mpm/core/service_registry.py +103 -101
  102. claude_mpm/core/session_manager.py +97 -87
  103. claude_mpm/core/socketio_pool.py +212 -158
  104. claude_mpm/core/tool_access_control.py +58 -51
  105. claude_mpm/core/types.py +46 -24
  106. claude_mpm/core/typing_utils.py +166 -82
  107. claude_mpm/core/unified_agent_registry.py +721 -0
  108. claude_mpm/core/unified_config.py +550 -0
  109. claude_mpm/core/unified_paths.py +549 -0
  110. claude_mpm/dashboard/index.html +1 -1
  111. claude_mpm/dashboard/open_dashboard.py +51 -17
  112. claude_mpm/dashboard/static/css/dashboard.css +27 -8
  113. claude_mpm/dashboard/static/dist/components/agent-inference.js +2 -0
  114. claude_mpm/dashboard/static/dist/components/event-processor.js +2 -0
  115. claude_mpm/dashboard/static/dist/components/event-viewer.js +2 -0
  116. claude_mpm/dashboard/static/dist/components/export-manager.js +2 -0
  117. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +2 -0
  118. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +2 -0
  119. claude_mpm/dashboard/static/dist/components/hud-manager.js +2 -0
  120. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +2 -0
  121. claude_mpm/dashboard/static/dist/components/module-viewer.js +2 -0
  122. claude_mpm/dashboard/static/dist/components/session-manager.js +2 -0
  123. claude_mpm/dashboard/static/dist/components/socket-manager.js +2 -0
  124. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +2 -0
  125. claude_mpm/dashboard/static/dist/components/working-directory.js +2 -0
  126. claude_mpm/dashboard/static/dist/dashboard.js +2 -0
  127. claude_mpm/dashboard/static/dist/socket-client.js +2 -0
  128. claude_mpm/dashboard/static/js/components/agent-inference.js +80 -76
  129. claude_mpm/dashboard/static/js/components/event-processor.js +71 -67
  130. claude_mpm/dashboard/static/js/components/event-viewer.js +74 -70
  131. claude_mpm/dashboard/static/js/components/export-manager.js +31 -28
  132. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +106 -92
  133. claude_mpm/dashboard/static/js/components/hud-library-loader.js +11 -11
  134. claude_mpm/dashboard/static/js/components/hud-manager.js +73 -73
  135. claude_mpm/dashboard/static/js/components/hud-visualizer.js +163 -163
  136. claude_mpm/dashboard/static/js/components/module-viewer.js +305 -233
  137. claude_mpm/dashboard/static/js/components/session-manager.js +32 -29
  138. claude_mpm/dashboard/static/js/components/socket-manager.js +27 -20
  139. claude_mpm/dashboard/static/js/components/ui-state-manager.js +21 -18
  140. claude_mpm/dashboard/static/js/components/working-directory.js +74 -71
  141. claude_mpm/dashboard/static/js/dashboard.js +178 -453
  142. claude_mpm/dashboard/static/js/extension-error-handler.js +164 -0
  143. claude_mpm/dashboard/static/js/socket-client.js +120 -54
  144. claude_mpm/dashboard/templates/index.html +40 -50
  145. claude_mpm/experimental/cli_enhancements.py +60 -58
  146. claude_mpm/generators/__init__.py +1 -1
  147. claude_mpm/generators/agent_profile_generator.py +75 -65
  148. claude_mpm/hooks/__init__.py +1 -1
  149. claude_mpm/hooks/base_hook.py +33 -28
  150. claude_mpm/hooks/claude_hooks/__init__.py +1 -1
  151. claude_mpm/hooks/claude_hooks/connection_pool.py +120 -0
  152. claude_mpm/hooks/claude_hooks/event_handlers.py +743 -0
  153. claude_mpm/hooks/claude_hooks/hook_handler.py +415 -1331
  154. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +4 -4
  155. claude_mpm/hooks/claude_hooks/memory_integration.py +221 -0
  156. claude_mpm/hooks/claude_hooks/response_tracking.py +348 -0
  157. claude_mpm/hooks/claude_hooks/tool_analysis.py +230 -0
  158. claude_mpm/hooks/memory_integration_hook.py +140 -100
  159. claude_mpm/hooks/tool_call_interceptor.py +89 -76
  160. claude_mpm/hooks/validation_hooks.py +57 -49
  161. claude_mpm/init.py +145 -121
  162. claude_mpm/models/__init__.py +9 -9
  163. claude_mpm/models/agent_definition.py +33 -23
  164. claude_mpm/models/agent_session.py +228 -200
  165. claude_mpm/scripts/__init__.py +1 -1
  166. claude_mpm/scripts/socketio_daemon.py +192 -75
  167. claude_mpm/scripts/socketio_server_manager.py +328 -0
  168. claude_mpm/scripts/start_activity_logging.py +25 -22
  169. claude_mpm/services/__init__.py +68 -43
  170. claude_mpm/services/agent_capabilities_service.py +271 -0
  171. claude_mpm/services/agents/__init__.py +23 -32
  172. claude_mpm/services/agents/deployment/__init__.py +3 -3
  173. claude_mpm/services/agents/deployment/agent_config_provider.py +310 -0
  174. claude_mpm/services/agents/deployment/agent_configuration_manager.py +359 -0
  175. claude_mpm/services/agents/deployment/agent_definition_factory.py +84 -0
  176. claude_mpm/services/agents/deployment/agent_deployment.py +415 -2113
  177. claude_mpm/services/agents/deployment/agent_discovery_service.py +387 -0
  178. claude_mpm/services/agents/deployment/agent_environment_manager.py +293 -0
  179. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +387 -0
  180. claude_mpm/services/agents/deployment/agent_format_converter.py +453 -0
  181. claude_mpm/services/agents/deployment/agent_frontmatter_validator.py +161 -0
  182. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +345 -495
  183. claude_mpm/services/agents/deployment/agent_metrics_collector.py +279 -0
  184. claude_mpm/services/agents/deployment/agent_restore_handler.py +88 -0
  185. claude_mpm/services/agents/deployment/agent_template_builder.py +406 -0
  186. claude_mpm/services/agents/deployment/agent_validator.py +352 -0
  187. claude_mpm/services/agents/deployment/agent_version_manager.py +313 -0
  188. claude_mpm/services/agents/deployment/agent_versioning.py +6 -9
  189. claude_mpm/services/agents/deployment/agents_directory_resolver.py +79 -0
  190. claude_mpm/services/agents/deployment/async_agent_deployment.py +298 -234
  191. claude_mpm/services/agents/deployment/config/__init__.py +13 -0
  192. claude_mpm/services/agents/deployment/config/deployment_config.py +182 -0
  193. claude_mpm/services/agents/deployment/config/deployment_config_manager.py +200 -0
  194. claude_mpm/services/agents/deployment/deployment_config_loader.py +54 -0
  195. claude_mpm/services/agents/deployment/deployment_type_detector.py +124 -0
  196. claude_mpm/services/agents/deployment/facade/__init__.py +18 -0
  197. claude_mpm/services/agents/deployment/facade/async_deployment_executor.py +159 -0
  198. claude_mpm/services/agents/deployment/facade/deployment_executor.py +73 -0
  199. claude_mpm/services/agents/deployment/facade/deployment_facade.py +270 -0
  200. claude_mpm/services/agents/deployment/facade/sync_deployment_executor.py +178 -0
  201. claude_mpm/services/agents/deployment/interface_adapter.py +227 -0
  202. claude_mpm/services/agents/deployment/lifecycle_health_checker.py +85 -0
  203. claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py +100 -0
  204. claude_mpm/services/agents/deployment/pipeline/__init__.py +32 -0
  205. claude_mpm/services/agents/deployment/pipeline/pipeline_builder.py +158 -0
  206. claude_mpm/services/agents/deployment/pipeline/pipeline_context.py +159 -0
  207. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +169 -0
  208. claude_mpm/services/agents/deployment/pipeline/steps/__init__.py +19 -0
  209. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +195 -0
  210. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +119 -0
  211. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +79 -0
  212. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +90 -0
  213. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +100 -0
  214. claude_mpm/services/agents/deployment/processors/__init__.py +15 -0
  215. claude_mpm/services/agents/deployment/processors/agent_deployment_context.py +98 -0
  216. claude_mpm/services/agents/deployment/processors/agent_deployment_result.py +235 -0
  217. claude_mpm/services/agents/deployment/processors/agent_processor.py +258 -0
  218. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +318 -0
  219. claude_mpm/services/agents/deployment/results/__init__.py +13 -0
  220. claude_mpm/services/agents/deployment/results/deployment_metrics.py +200 -0
  221. claude_mpm/services/agents/deployment/results/deployment_result_builder.py +249 -0
  222. claude_mpm/services/agents/deployment/strategies/__init__.py +25 -0
  223. claude_mpm/services/agents/deployment/strategies/base_strategy.py +119 -0
  224. claude_mpm/services/agents/deployment/strategies/project_strategy.py +150 -0
  225. claude_mpm/services/agents/deployment/strategies/strategy_selector.py +117 -0
  226. claude_mpm/services/agents/deployment/strategies/system_strategy.py +116 -0
  227. claude_mpm/services/agents/deployment/strategies/user_strategy.py +137 -0
  228. claude_mpm/services/agents/deployment/system_instructions_deployer.py +108 -0
  229. claude_mpm/services/agents/deployment/validation/__init__.py +19 -0
  230. claude_mpm/services/agents/deployment/validation/agent_validator.py +323 -0
  231. claude_mpm/services/agents/deployment/validation/deployment_validator.py +238 -0
  232. claude_mpm/services/agents/deployment/validation/template_validator.py +299 -0
  233. claude_mpm/services/agents/deployment/validation/validation_result.py +226 -0
  234. claude_mpm/services/agents/loading/__init__.py +2 -2
  235. claude_mpm/services/agents/loading/agent_profile_loader.py +259 -229
  236. claude_mpm/services/agents/loading/base_agent_manager.py +90 -81
  237. claude_mpm/services/agents/loading/framework_agent_loader.py +154 -129
  238. claude_mpm/services/agents/management/__init__.py +2 -2
  239. claude_mpm/services/agents/management/agent_capabilities_generator.py +72 -58
  240. claude_mpm/services/agents/management/agent_management_service.py +209 -156
  241. claude_mpm/services/agents/memory/__init__.py +9 -6
  242. claude_mpm/services/agents/memory/agent_memory_manager.py +218 -1152
  243. claude_mpm/services/agents/memory/agent_persistence_service.py +20 -16
  244. claude_mpm/services/agents/memory/analyzer.py +430 -0
  245. claude_mpm/services/agents/memory/content_manager.py +376 -0
  246. claude_mpm/services/agents/memory/template_generator.py +468 -0
  247. claude_mpm/services/agents/registry/__init__.py +7 -10
  248. claude_mpm/services/agents/registry/deployed_agent_discovery.py +122 -97
  249. claude_mpm/services/agents/registry/modification_tracker.py +351 -285
  250. claude_mpm/services/async_session_logger.py +187 -153
  251. claude_mpm/services/claude_session_logger.py +87 -72
  252. claude_mpm/services/command_handler_service.py +217 -0
  253. claude_mpm/services/communication/__init__.py +3 -2
  254. claude_mpm/services/core/__init__.py +50 -97
  255. claude_mpm/services/core/base.py +60 -53
  256. claude_mpm/services/core/interfaces/__init__.py +188 -0
  257. claude_mpm/services/core/interfaces/agent.py +351 -0
  258. claude_mpm/services/core/interfaces/communication.py +343 -0
  259. claude_mpm/services/core/interfaces/infrastructure.py +413 -0
  260. claude_mpm/services/core/interfaces/service.py +434 -0
  261. claude_mpm/services/core/interfaces.py +19 -944
  262. claude_mpm/services/event_aggregator.py +208 -170
  263. claude_mpm/services/exceptions.py +387 -308
  264. claude_mpm/services/framework_claude_md_generator/__init__.py +75 -79
  265. claude_mpm/services/framework_claude_md_generator/content_assembler.py +69 -60
  266. claude_mpm/services/framework_claude_md_generator/content_validator.py +65 -61
  267. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +68 -49
  268. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +34 -34
  269. claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +25 -22
  270. claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +10 -10
  271. claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +4 -3
  272. claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +4 -3
  273. claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +4 -3
  274. claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +6 -5
  275. claude_mpm/services/framework_claude_md_generator/section_generators/header.py +8 -7
  276. claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +4 -3
  277. claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +6 -5
  278. claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +9 -8
  279. claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +4 -3
  280. claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +5 -4
  281. claude_mpm/services/framework_claude_md_generator/section_manager.py +28 -27
  282. claude_mpm/services/framework_claude_md_generator/version_manager.py +30 -28
  283. claude_mpm/services/hook_service.py +106 -114
  284. claude_mpm/services/infrastructure/__init__.py +7 -5
  285. claude_mpm/services/infrastructure/context_preservation.py +571 -0
  286. claude_mpm/services/infrastructure/daemon_manager.py +279 -0
  287. claude_mpm/services/infrastructure/logging.py +83 -76
  288. claude_mpm/services/infrastructure/monitoring.py +547 -404
  289. claude_mpm/services/mcp_gateway/__init__.py +40 -23
  290. claude_mpm/services/mcp_gateway/config/__init__.py +2 -2
  291. claude_mpm/services/mcp_gateway/config/config_loader.py +61 -56
  292. claude_mpm/services/mcp_gateway/config/config_schema.py +50 -41
  293. claude_mpm/services/mcp_gateway/config/configuration.py +82 -75
  294. claude_mpm/services/mcp_gateway/core/__init__.py +14 -21
  295. claude_mpm/services/mcp_gateway/core/base.py +80 -67
  296. claude_mpm/services/mcp_gateway/core/exceptions.py +60 -46
  297. claude_mpm/services/mcp_gateway/core/interfaces.py +97 -93
  298. claude_mpm/services/mcp_gateway/main.py +307 -127
  299. claude_mpm/services/mcp_gateway/registry/__init__.py +1 -1
  300. claude_mpm/services/mcp_gateway/registry/service_registry.py +100 -101
  301. claude_mpm/services/mcp_gateway/registry/tool_registry.py +135 -126
  302. claude_mpm/services/mcp_gateway/server/__init__.py +4 -4
  303. claude_mpm/services/mcp_gateway/server/{mcp_server.py → mcp_gateway.py} +149 -153
  304. claude_mpm/services/mcp_gateway/server/stdio_handler.py +105 -107
  305. claude_mpm/services/mcp_gateway/server/stdio_server.py +691 -0
  306. claude_mpm/services/mcp_gateway/tools/__init__.py +4 -2
  307. claude_mpm/services/mcp_gateway/tools/base_adapter.py +110 -121
  308. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +283 -215
  309. claude_mpm/services/mcp_gateway/tools/hello_world.py +122 -120
  310. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +652 -0
  311. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +606 -0
  312. claude_mpm/services/memory/__init__.py +2 -2
  313. claude_mpm/services/memory/builder.py +451 -362
  314. claude_mpm/services/memory/cache/__init__.py +2 -2
  315. claude_mpm/services/memory/cache/shared_prompt_cache.py +232 -194
  316. claude_mpm/services/memory/cache/simple_cache.py +107 -93
  317. claude_mpm/services/memory/indexed_memory.py +195 -193
  318. claude_mpm/services/memory/optimizer.py +267 -234
  319. claude_mpm/services/memory/router.py +571 -263
  320. claude_mpm/services/memory_hook_service.py +237 -0
  321. claude_mpm/services/port_manager.py +223 -0
  322. claude_mpm/services/project/__init__.py +3 -3
  323. claude_mpm/services/project/analyzer.py +451 -305
  324. claude_mpm/services/project/registry.py +262 -240
  325. claude_mpm/services/recovery_manager.py +287 -231
  326. claude_mpm/services/response_tracker.py +87 -67
  327. claude_mpm/services/runner_configuration_service.py +587 -0
  328. claude_mpm/services/session_management_service.py +304 -0
  329. claude_mpm/services/socketio/__init__.py +4 -4
  330. claude_mpm/services/socketio/client_proxy.py +174 -0
  331. claude_mpm/services/socketio/handlers/__init__.py +3 -3
  332. claude_mpm/services/socketio/handlers/base.py +44 -30
  333. claude_mpm/services/socketio/handlers/connection.py +145 -65
  334. claude_mpm/services/socketio/handlers/file.py +123 -108
  335. claude_mpm/services/socketio/handlers/git.py +607 -373
  336. claude_mpm/services/socketio/handlers/hook.py +170 -0
  337. claude_mpm/services/socketio/handlers/memory.py +4 -4
  338. claude_mpm/services/socketio/handlers/project.py +4 -4
  339. claude_mpm/services/socketio/handlers/registry.py +53 -38
  340. claude_mpm/services/socketio/server/__init__.py +18 -0
  341. claude_mpm/services/socketio/server/broadcaster.py +252 -0
  342. claude_mpm/services/socketio/server/core.py +399 -0
  343. claude_mpm/services/socketio/server/main.py +323 -0
  344. claude_mpm/services/socketio_client_manager.py +160 -133
  345. claude_mpm/services/socketio_server.py +36 -1885
  346. claude_mpm/services/subprocess_launcher_service.py +316 -0
  347. claude_mpm/services/system_instructions_service.py +258 -0
  348. claude_mpm/services/ticket_manager.py +20 -534
  349. claude_mpm/services/utility_service.py +285 -0
  350. claude_mpm/services/version_control/__init__.py +18 -21
  351. claude_mpm/services/version_control/branch_strategy.py +20 -10
  352. claude_mpm/services/version_control/conflict_resolution.py +37 -13
  353. claude_mpm/services/version_control/git_operations.py +52 -21
  354. claude_mpm/services/version_control/semantic_versioning.py +92 -53
  355. claude_mpm/services/version_control/version_parser.py +145 -125
  356. claude_mpm/services/version_service.py +270 -0
  357. claude_mpm/storage/__init__.py +9 -0
  358. claude_mpm/storage/state_storage.py +552 -0
  359. claude_mpm/ticket_wrapper.py +2 -2
  360. claude_mpm/utils/__init__.py +2 -2
  361. claude_mpm/utils/agent_dependency_loader.py +453 -243
  362. claude_mpm/utils/config_manager.py +157 -118
  363. claude_mpm/utils/console.py +1 -1
  364. claude_mpm/utils/dependency_cache.py +102 -107
  365. claude_mpm/utils/dependency_manager.py +52 -47
  366. claude_mpm/utils/dependency_strategies.py +131 -96
  367. claude_mpm/utils/environment_context.py +110 -102
  368. claude_mpm/utils/error_handler.py +75 -55
  369. claude_mpm/utils/file_utils.py +80 -67
  370. claude_mpm/utils/framework_detection.py +12 -11
  371. claude_mpm/utils/import_migration_example.py +12 -60
  372. claude_mpm/utils/imports.py +48 -45
  373. claude_mpm/utils/path_operations.py +100 -93
  374. claude_mpm/utils/robust_installer.py +172 -164
  375. claude_mpm/utils/session_logging.py +30 -23
  376. claude_mpm/utils/subprocess_utils.py +99 -61
  377. claude_mpm/validation/__init__.py +1 -1
  378. claude_mpm/validation/agent_validator.py +151 -111
  379. claude_mpm/validation/frontmatter_validator.py +92 -71
  380. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/METADATA +51 -2
  381. claude_mpm-4.0.3.dist-info/RECORD +402 -0
  382. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/entry_points.txt +1 -0
  383. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/licenses/LICENSE +1 -1
  384. claude_mpm/config/memory_guardian_config.py +0 -325
  385. claude_mpm/core/config_paths.py +0 -150
  386. claude_mpm/dashboard/static/js/dashboard-original.js +0 -4134
  387. claude_mpm/deployment_paths.py +0 -261
  388. claude_mpm/hooks/claude_hooks/hook_handler_fixed.py +0 -454
  389. claude_mpm/models/state_models.py +0 -433
  390. claude_mpm/services/agent/__init__.py +0 -24
  391. claude_mpm/services/agent/deployment.py +0 -2548
  392. claude_mpm/services/agent/management.py +0 -598
  393. claude_mpm/services/agent/registry.py +0 -813
  394. claude_mpm/services/agents/registry/agent_registry.py +0 -813
  395. claude_mpm/services/communication/socketio.py +0 -1935
  396. claude_mpm/services/communication/websocket.py +0 -479
  397. claude_mpm/services/framework_claude_md_generator.py +0 -624
  398. claude_mpm/services/health_monitor.py +0 -893
  399. claude_mpm/services/infrastructure/memory_guardian.py +0 -770
  400. claude_mpm/services/mcp_gateway/server/mcp_server_simple.py +0 -444
  401. claude_mpm/services/optimized_hook_service.py +0 -542
  402. claude_mpm/services/project_analyzer.py +0 -864
  403. claude_mpm/services/project_registry.py +0 -608
  404. claude_mpm/services/standalone_socketio_server.py +0 -1300
  405. claude_mpm/services/ticket_manager_di.py +0 -318
  406. claude_mpm/services/ticketing_service_original.py +0 -510
  407. claude_mpm/utils/paths.py +0 -395
  408. claude_mpm/utils/platform_memory.py +0 -524
  409. claude_mpm-3.9.9.dist-info/RECORD +0 -293
  410. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/WHEEL +0 -0
  411. {claude_mpm-3.9.9.dist-info → claude_mpm-4.0.3.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,5 @@
1
+ from pathlib import Path
2
+
1
3
  """
2
4
  MCP Gateway Main Entry Point
3
5
  =============================
@@ -8,134 +10,270 @@ Orchestrates server initialization, tool registration, and lifecycle management.
8
10
  Part of ISS-0035: MCP Server Implementation - Core Server and Tool Registry
9
11
  """
10
12
 
11
- import asyncio
12
- import sys
13
- import signal
14
- from pathlib import Path
15
- from typing import Optional, List
16
13
  import argparse
14
+ import asyncio
17
15
  import logging
16
+ import signal
17
+ import sys
18
+ from typing import List, Optional
19
+
20
+ # Import with fallback handling for missing dependencies
21
+ try:
22
+ from claude_mpm.core.logger import get_logger
23
+ except ImportError:
24
+ import logging
25
+
26
+ def get_logger(name):
27
+ return logging.getLogger(name)
28
+
29
+
30
+ try:
31
+ from claude_mpm.services.mcp_gateway.config.configuration import MCPConfiguration
32
+ except ImportError:
33
+ # Fallback configuration class
34
+ class MCPConfiguration:
35
+ def __init__(self):
36
+ self.config = {}
37
+
38
+ def load_config(self, path):
39
+ return True
40
+
41
+ def get(self, key, default=None):
42
+ return default
43
+
44
+
45
+ try:
46
+ from claude_mpm.services.mcp_gateway.registry.tool_registry import ToolRegistry
47
+ except ImportError:
48
+ # Minimal fallback registry
49
+ class ToolRegistry:
50
+ def __init__(self):
51
+ self.tools = []
52
+
53
+ async def initialize(self):
54
+ return True
55
+
56
+ def register_tool(self, tool, category="builtin"):
57
+ return True
58
+
59
+ async def shutdown(self):
60
+ pass
61
+
62
+
63
+ try:
64
+ from claude_mpm.services.mcp_gateway.server.mcp_gateway import MCPGateway
65
+ except ImportError as e:
66
+ raise ImportError(f"Critical: Cannot import MCPGateway server: {e}")
67
+
68
+ try:
69
+ from claude_mpm.services.mcp_gateway.server.stdio_handler import StdioHandler
70
+ except ImportError:
71
+ # Fallback stdio handler
72
+ class StdioHandler:
73
+ async def initialize(self):
74
+ return True
75
+
76
+ async def shutdown(self):
77
+ pass
78
+
79
+
80
+ # Import tools with individual fallbacks
81
+ try:
82
+ from claude_mpm.services.mcp_gateway.tools.base_adapter import (
83
+ CalculatorToolAdapter,
84
+ EchoToolAdapter,
85
+ SystemInfoToolAdapter,
86
+ )
87
+ except ImportError:
88
+ # Create dummy tool adapters
89
+ class BaseToolAdapter:
90
+ def __init__(self):
91
+ pass
92
+
93
+ async def initialize(self):
94
+ return True
95
+
96
+ def get_definition(self):
97
+ return type("ToolDef", (), {"name": "unknown"})
98
+
99
+ CalculatorToolAdapter = BaseToolAdapter
100
+ EchoToolAdapter = BaseToolAdapter
101
+ SystemInfoToolAdapter = BaseToolAdapter
102
+
103
+ try:
104
+ from claude_mpm.services.mcp_gateway.tools.document_summarizer import (
105
+ DocumentSummarizerTool,
106
+ )
107
+ except ImportError:
108
+ DocumentSummarizerTool = None
109
+
110
+ try:
111
+ from claude_mpm.services.mcp_gateway.tools.unified_ticket_tool import (
112
+ UnifiedTicketTool,
113
+ )
114
+ except ImportError:
115
+ # Unified ticket tool is optional
116
+ UnifiedTicketTool = None
18
117
 
19
- from claude_mpm.services.mcp_gateway.server.mcp_server import MCPServer
20
- from claude_mpm.services.mcp_gateway.server.stdio_handler import StdioHandler
21
- from claude_mpm.services.mcp_gateway.registry.tool_registry import ToolRegistry
22
- from claude_mpm.services.mcp_gateway.tools.base_adapter import (
23
- EchoToolAdapter,
24
- CalculatorToolAdapter,
25
- SystemInfoToolAdapter
26
- )
27
- from claude_mpm.services.mcp_gateway.tools.document_summarizer import DocumentSummarizerTool
28
- from claude_mpm.services.mcp_gateway.config.configuration import MCPConfiguration
29
- from claude_mpm.core.logger import get_logger
118
+ # Manager module removed - using simplified architecture
30
119
 
31
120
 
32
- class MCPGateway:
121
+ class MCPGatewayOrchestrator:
33
122
  """
34
123
  Main MCP Gateway orchestrator.
35
-
124
+
36
125
  WHY: This class coordinates all MCP components, managing their lifecycle
37
126
  and ensuring proper initialization, startup, and shutdown sequences.
38
-
127
+
39
128
  DESIGN DECISIONS:
40
129
  - Use dependency injection to wire components together
41
130
  - Implement graceful shutdown on SIGINT/SIGTERM
42
131
  - Support both configuration file and CLI arguments
43
132
  - Provide comprehensive logging for debugging
133
+ - Renamed from MCPGateway to avoid naming conflict with server class
44
134
  """
45
-
135
+
46
136
  def __init__(self, config_path: Optional[Path] = None):
47
137
  """
48
138
  Initialize the MCP Gateway.
49
-
139
+
50
140
  Args:
51
141
  config_path: Optional path to configuration file
52
142
  """
53
143
  self.logger = get_logger(self.__class__.__name__)
54
144
  self.config_path = config_path
55
-
145
+
56
146
  # Core components
57
- self.server: Optional[MCPServer] = None
147
+ self.server: Optional[MCPGateway] = None
58
148
  self.registry: Optional[ToolRegistry] = None
59
149
  self.communication: Optional[StdioHandler] = None
60
150
  self.configuration: Optional[MCPConfiguration] = None
61
-
151
+
62
152
  # Shutdown handling
63
153
  self._shutdown_event = asyncio.Event()
64
154
  self._setup_signal_handlers()
65
-
155
+
66
156
  def _setup_signal_handlers(self) -> None:
67
157
  """Setup signal handlers for graceful shutdown."""
158
+
68
159
  def signal_handler(sig, frame):
69
160
  self.logger.info(f"Received signal {sig}, initiating shutdown...")
70
161
  self._shutdown_event.set()
71
-
162
+
72
163
  signal.signal(signal.SIGINT, signal_handler)
73
164
  signal.signal(signal.SIGTERM, signal_handler)
74
-
165
+
75
166
  async def initialize(self) -> bool:
76
167
  """
77
168
  Initialize all MCP Gateway components.
78
-
169
+
79
170
  Returns:
80
171
  True if initialization successful
81
172
  """
82
173
  try:
83
174
  self.logger.info("Initializing MCP Gateway")
84
-
175
+
85
176
  # Load configuration
86
177
  self.configuration = MCPConfiguration()
87
178
  if self.config_path and self.config_path.exists():
88
179
  if not self.configuration.load_config(self.config_path):
89
180
  self.logger.error("Failed to load configuration")
90
181
  return False
91
-
92
- # Initialize tool registry
93
- self.registry = ToolRegistry()
94
- if not await self.registry.initialize():
95
- self.logger.error("Failed to initialize tool registry")
96
- return False
97
-
98
- # Register built-in tools
99
- await self._register_builtin_tools()
100
-
101
- # Initialize communication handler
102
- self.communication = StdioHandler()
103
- if not await self.communication.initialize():
104
- self.logger.error("Failed to initialize communication handler")
105
- return False
106
-
107
- # Initialize MCP server
108
- server_name = self.configuration.get("server.name", "claude-mpm-mcp")
182
+
183
+ # Initialize tool registry with error handling
184
+ try:
185
+ self.registry = ToolRegistry()
186
+ if not await self.registry.initialize():
187
+ self.logger.error("Failed to initialize tool registry")
188
+ # Continue anyway - server can run without tools
189
+ self.registry = None
190
+ except Exception as e:
191
+ self.logger.warning(f"Tool registry initialization failed: {e}")
192
+ self.registry = None
193
+
194
+ # Register built-in tools if registry is available
195
+ if self.registry:
196
+ try:
197
+ await self._register_builtin_tools()
198
+ except Exception as e:
199
+ self.logger.warning(f"Failed to register some tools: {e}")
200
+ # Continue - server can run with partial tools
201
+
202
+ # Initialize communication handler with fallback
203
+ try:
204
+ self.communication = StdioHandler()
205
+ if not await self.communication.initialize():
206
+ self.logger.warning("Failed to initialize communication handler")
207
+ # Communication is optional for the server
208
+ self.communication = None
209
+ except Exception as e:
210
+ self.logger.warning(f"Communication handler initialization failed: {e}")
211
+ self.communication = None
212
+
213
+ # Initialize MCP gateway server
214
+ gateway_name = self.configuration.get("server.name", "claude-mpm-mcp")
109
215
  version = self.configuration.get("server.version", "1.0.0")
110
- self.server = MCPServer(server_name=server_name, version=version)
111
-
112
- # Wire dependencies
113
- self.server.set_tool_registry(self.registry)
114
- self.server.set_communication(self.communication)
115
-
216
+ self.server = MCPGateway(gateway_name=gateway_name, version=version)
217
+
218
+ # Wire dependencies (only if available)
219
+ if self.registry:
220
+ self.server.set_tool_registry(self.registry)
221
+ else:
222
+ self.logger.warning("Running without tool registry")
223
+
224
+ if self.communication:
225
+ self.server.set_communication(self.communication)
226
+ else:
227
+ self.logger.info("Running without custom communication handler")
228
+
116
229
  if not await self.server.initialize():
117
230
  self.logger.error("Failed to initialize MCP server")
118
231
  return False
119
-
232
+
120
233
  self.logger.info("MCP Gateway initialized successfully")
121
234
  return True
122
-
235
+
123
236
  except Exception as e:
124
237
  self.logger.error(f"Failed to initialize MCP Gateway: {e}")
125
238
  return False
126
-
239
+
127
240
  async def _register_builtin_tools(self) -> None:
128
241
  """Register built-in tools with the registry."""
129
242
  self.logger.info("Registering built-in tools")
130
-
131
- # Create tool adapters
132
- tools = [
133
- EchoToolAdapter(),
134
- CalculatorToolAdapter(),
135
- SystemInfoToolAdapter(),
136
- DocumentSummarizerTool() # ISS-0037: Document summarizer for memory optimization
137
- ]
138
-
243
+
244
+ # Create tool adapters (only include available tools)
245
+ tools = []
246
+
247
+ # Always include basic tools
248
+ try:
249
+ tools.extend(
250
+ [
251
+ EchoToolAdapter(),
252
+ CalculatorToolAdapter(),
253
+ SystemInfoToolAdapter(),
254
+ ]
255
+ )
256
+ except Exception as e:
257
+ self.logger.warning(f"Could not load basic tools: {e}")
258
+
259
+ # Optional: Document summarizer
260
+ if DocumentSummarizerTool is not None:
261
+ try:
262
+ tools.append(DocumentSummarizerTool())
263
+ except Exception as e:
264
+ self.logger.warning(f"Could not load document summarizer: {e}")
265
+
266
+ # Optional: Unified ticket management tool
267
+ if UnifiedTicketTool is not None:
268
+ try:
269
+ tools.append(UnifiedTicketTool())
270
+ except Exception as e:
271
+ self.logger.warning(f"Could not load unified ticket tool: {e}")
272
+
273
+ if not tools:
274
+ self.logger.warning("No tools available to register")
275
+ return
276
+
139
277
  # Register each tool
140
278
  for tool in tools:
141
279
  try:
@@ -143,76 +281,90 @@ class MCPGateway:
143
281
  if await tool.initialize():
144
282
  # Register with the registry
145
283
  if self.registry.register_tool(tool, category="builtin"):
146
- self.logger.info(f"Registered tool: {tool.get_definition().name}")
284
+ self.logger.info(
285
+ f"Registered tool: {tool.get_definition().name}"
286
+ )
147
287
  else:
148
- self.logger.warning(f"Failed to register tool: {tool.get_definition().name}")
288
+ self.logger.warning(
289
+ f"Failed to register tool: {tool.get_definition().name}"
290
+ )
149
291
  else:
150
- self.logger.warning(f"Failed to initialize tool: {tool.get_definition().name}")
292
+ self.logger.warning(
293
+ f"Failed to initialize tool: {tool.get_definition().name}"
294
+ )
151
295
  except Exception as e:
152
- self.logger.error(f"Error registering tool {tool.get_definition().name}: {e}")
153
-
296
+ self.logger.error(
297
+ f"Error registering tool {tool.get_definition().name}: {e}"
298
+ )
299
+
154
300
  async def start(self) -> bool:
155
301
  """
156
302
  Start the MCP Gateway server.
157
-
303
+
158
304
  Returns:
159
305
  True if startup successful
160
306
  """
161
307
  try:
162
308
  self.logger.info("Starting MCP Gateway")
163
-
309
+
164
310
  if not self.server:
165
311
  self.logger.error("Server not initialized")
166
312
  return False
167
-
313
+
168
314
  if not await self.server.start():
169
315
  self.logger.error("Failed to start MCP server")
170
316
  return False
171
-
317
+
172
318
  self.logger.info("MCP Gateway started successfully")
173
319
  return True
174
-
320
+
175
321
  except Exception as e:
176
322
  self.logger.error(f"Failed to start MCP Gateway: {e}")
177
323
  return False
178
-
324
+
179
325
  async def run(self) -> None:
180
326
  """
181
327
  Run the MCP Gateway main loop.
182
-
328
+
183
329
  This method blocks until shutdown is requested.
184
330
  """
185
331
  try:
186
332
  self.logger.info("MCP Gateway running")
187
-
333
+
188
334
  # Wait for shutdown signal
189
335
  await self._shutdown_event.wait()
190
-
336
+
191
337
  self.logger.info("Shutdown signal received")
192
-
338
+
193
339
  except Exception as e:
194
340
  self.logger.error(f"Error in MCP Gateway main loop: {e}")
195
341
  raise
196
-
342
+
197
343
  async def shutdown(self) -> None:
198
344
  """Shutdown the MCP Gateway gracefully."""
199
345
  try:
200
346
  self.logger.info("Shutting down MCP Gateway")
201
-
347
+
202
348
  # Shutdown server
203
349
  if self.server:
204
350
  await self.server.shutdown()
205
-
351
+
206
352
  # Shutdown registry (which will shutdown all tools)
207
353
  if self.registry:
208
- await self.registry.shutdown()
209
-
354
+ try:
355
+ await self.registry.shutdown()
356
+ except Exception as e:
357
+ self.logger.warning(f"Error during registry shutdown: {e}")
358
+
210
359
  # Shutdown communication handler
211
360
  if self.communication:
212
- await self.communication.shutdown()
213
-
361
+ try:
362
+ await self.communication.shutdown()
363
+ except Exception as e:
364
+ self.logger.warning(f"Error during communication shutdown: {e}")
365
+
214
366
  self.logger.info("MCP Gateway shutdown complete")
215
-
367
+
216
368
  except Exception as e:
217
369
  self.logger.error(f"Error during shutdown: {e}")
218
370
 
@@ -220,43 +372,42 @@ class MCPGateway:
220
372
  async def main(args: argparse.Namespace) -> int:
221
373
  """
222
374
  Main entry point for the MCP Gateway.
223
-
375
+
224
376
  Args:
225
377
  args: Command line arguments
226
-
378
+
227
379
  Returns:
228
380
  Exit code (0 for success, 1 for failure)
229
381
  """
230
382
  # Setup logging
231
383
  log_level = logging.DEBUG if args.debug else logging.INFO
232
384
  logging.basicConfig(
233
- level=log_level,
234
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
385
+ level=log_level, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
235
386
  )
236
-
237
- # Create gateway instance
387
+
388
+ # Create gateway orchestrator instance
238
389
  config_path = Path(args.config) if args.config else None
239
- gateway = MCPGateway(config_path=config_path)
240
-
390
+ gateway = MCPGatewayOrchestrator(config_path=config_path)
391
+
241
392
  try:
242
393
  # Initialize
243
394
  if not await gateway.initialize():
244
395
  logging.error("Failed to initialize MCP Gateway")
245
396
  return 1
246
-
397
+
247
398
  # Start
248
399
  if not await gateway.start():
249
400
  logging.error("Failed to start MCP Gateway")
250
401
  return 1
251
-
402
+
252
403
  # Run until shutdown
253
404
  await gateway.run()
254
-
405
+
255
406
  # Graceful shutdown
256
407
  await gateway.shutdown()
257
-
408
+
258
409
  return 0
259
-
410
+
260
411
  except Exception as e:
261
412
  logging.error(f"Unhandled exception: {e}")
262
413
  await gateway.shutdown()
@@ -266,7 +417,7 @@ async def main(args: argparse.Namespace) -> int:
266
417
  def parse_arguments() -> argparse.Namespace:
267
418
  """
268
419
  Parse command line arguments.
269
-
420
+
270
421
  Returns:
271
422
  Parsed arguments
272
423
  """
@@ -277,50 +428,79 @@ def parse_arguments() -> argparse.Namespace:
277
428
  Examples:
278
429
  # Run with default configuration
279
430
  python -m claude_mpm.services.mcp_gateway.main
280
-
431
+
281
432
  # Run with custom configuration file
282
433
  python -m claude_mpm.services.mcp_gateway.main --config /path/to/config.yaml
283
-
434
+
284
435
  # Run with debug logging
285
436
  python -m claude_mpm.services.mcp_gateway.main --debug
286
-
437
+
287
438
  # Run as MCP server for Claude Desktop
288
439
  python -m claude_mpm.services.mcp_gateway.main --stdio
289
- """
290
- )
291
-
292
- parser.add_argument(
293
- "--config",
294
- type=str,
295
- help="Path to configuration file"
296
- )
297
-
298
- parser.add_argument(
299
- "--debug",
300
- action="store_true",
301
- help="Enable debug logging"
440
+ """,
302
441
  )
303
-
442
+
443
+ parser.add_argument("--config", type=str, help="Path to configuration file")
444
+
445
+ parser.add_argument("--debug", action="store_true", help="Enable debug logging")
446
+
304
447
  parser.add_argument(
305
448
  "--stdio",
306
449
  action="store_true",
307
450
  default=True,
308
- help="Use stdio for communication (default)"
451
+ help="Use stdio for communication (default)",
309
452
  )
310
-
453
+
311
454
  parser.add_argument(
312
- "--version",
313
- action="version",
314
- version="Claude MPM MCP Gateway 1.0.0"
455
+ "--version", action="version", version="Claude MPM MCP Gateway 1.0.0"
315
456
  )
316
-
457
+
317
458
  return parser.parse_args()
318
459
 
319
460
 
461
+ async def run_standalone_gateway(
462
+ gateway_name: str = "claude-mpm-mcp", version: str = "1.0.0"
463
+ ):
464
+ """
465
+ Run the MCP Gateway as a standalone server.
466
+
467
+ This creates a simple instance without complex management.
468
+
469
+ Args:
470
+ gateway_name: Name for the gateway
471
+ version: Gateway version
472
+ """
473
+ logger = get_logger("MCPGatewayMain")
474
+
475
+ try:
476
+ logger.info(f"Starting standalone MCP gateway: {gateway_name}")
477
+
478
+ # Create and run a simple orchestrator
479
+ orchestrator = MCPGatewayOrchestrator()
480
+
481
+ if not await orchestrator.initialize():
482
+ logger.error("Failed to initialize gateway")
483
+ return False
484
+
485
+ if not await orchestrator.start():
486
+ logger.error("Failed to start gateway")
487
+ return False
488
+
489
+ # Run until shutdown
490
+ await orchestrator.run()
491
+ await orchestrator.shutdown()
492
+
493
+ return True
494
+
495
+ except Exception as e:
496
+ logger.error(f"Error running standalone gateway: {e}")
497
+ return False
498
+
499
+
320
500
  if __name__ == "__main__":
321
501
  # Parse arguments
322
502
  args = parse_arguments()
323
-
503
+
324
504
  # Run the gateway
325
505
  exit_code = asyncio.run(main(args))
326
- sys.exit(exit_code)
506
+ sys.exit(exit_code)
@@ -9,4 +9,4 @@ from .tool_registry import ToolRegistry
9
9
 
10
10
  __all__ = [
11
11
  "ToolRegistry",
12
- ]
12
+ ]