claude-mpm 4.21.3__py3-none-any.whl → 5.1.9__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.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (517) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +3 -48
  4. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +1239 -674
  6. claude_mpm/agents/WORKFLOW.md +75 -2
  7. claude_mpm/agents/__init__.py +6 -0
  8. claude_mpm/agents/agent_loader.py +1 -4
  9. claude_mpm/agents/base_agent.json +6 -3
  10. claude_mpm/agents/base_agent_loader.py +10 -35
  11. claude_mpm/agents/frontmatter_validator.py +69 -1
  12. claude_mpm/agents/templates/circuit-breakers.md +1254 -0
  13. claude_mpm/agents/templates/context-management-examples.md +544 -0
  14. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
  15. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  16. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  17. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  18. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  19. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  20. claude_mpm/cli/__init__.py +37 -2
  21. claude_mpm/cli/commands/__init__.py +2 -0
  22. claude_mpm/cli/commands/agent_source.py +774 -0
  23. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  24. claude_mpm/cli/commands/agents.py +1128 -36
  25. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  26. claude_mpm/cli/commands/agents_discover.py +338 -0
  27. claude_mpm/cli/commands/aggregate.py +1 -1
  28. claude_mpm/cli/commands/analyze.py +3 -3
  29. claude_mpm/cli/commands/auto_configure.py +537 -239
  30. claude_mpm/cli/commands/cleanup.py +1 -1
  31. claude_mpm/cli/commands/config.py +7 -4
  32. claude_mpm/cli/commands/configure.py +935 -45
  33. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  34. claude_mpm/cli/commands/configure_navigation.py +63 -46
  35. claude_mpm/cli/commands/debug.py +12 -12
  36. claude_mpm/cli/commands/doctor.py +10 -2
  37. claude_mpm/cli/commands/hook_errors.py +277 -0
  38. claude_mpm/cli/commands/local_deploy.py +1 -4
  39. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  40. claude_mpm/cli/commands/mpm_init/core.py +50 -2
  41. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  42. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  43. claude_mpm/cli/commands/postmortem.py +401 -0
  44. claude_mpm/cli/commands/run.py +125 -167
  45. claude_mpm/cli/commands/skill_source.py +694 -0
  46. claude_mpm/cli/commands/skills.py +757 -20
  47. claude_mpm/cli/executor.py +78 -3
  48. claude_mpm/cli/interactive/agent_wizard.py +1032 -47
  49. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  50. claude_mpm/cli/parsers/agents_parser.py +310 -4
  51. claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
  52. claude_mpm/cli/parsers/base_parser.py +53 -0
  53. claude_mpm/cli/parsers/config_parser.py +96 -43
  54. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  55. claude_mpm/cli/parsers/skills_parser.py +145 -0
  56. claude_mpm/cli/parsers/source_parser.py +138 -0
  57. claude_mpm/cli/startup.py +564 -108
  58. claude_mpm/cli/startup_display.py +480 -0
  59. claude_mpm/cli/utils.py +1 -1
  60. claude_mpm/cli_module/commands.py +1 -1
  61. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  62. claude_mpm/commands/mpm-agents-detect.md +9 -0
  63. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  64. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  65. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  66. claude_mpm/commands/mpm-doctor.md +9 -0
  67. claude_mpm/commands/mpm-help.md +14 -2
  68. claude_mpm/commands/mpm-init.md +27 -2
  69. claude_mpm/commands/mpm-monitor.md +9 -0
  70. claude_mpm/commands/mpm-postmortem.md +123 -0
  71. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  72. claude_mpm/commands/mpm-status.md +9 -0
  73. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  74. claude_mpm/commands/mpm-ticket-view.md +552 -0
  75. claude_mpm/commands/mpm-version.md +9 -0
  76. claude_mpm/commands/mpm.md +10 -0
  77. claude_mpm/config/agent_presets.py +488 -0
  78. claude_mpm/config/agent_sources.py +325 -0
  79. claude_mpm/config/skill_presets.py +392 -0
  80. claude_mpm/config/skill_sources.py +590 -0
  81. claude_mpm/constants.py +13 -0
  82. claude_mpm/core/api_validator.py +1 -1
  83. claude_mpm/core/claude_runner.py +19 -35
  84. claude_mpm/core/config.py +24 -0
  85. claude_mpm/core/constants.py +1 -1
  86. claude_mpm/core/framework/__init__.py +3 -16
  87. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  88. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  89. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  90. claude_mpm/core/hook_error_memory.py +381 -0
  91. claude_mpm/core/hook_manager.py +41 -2
  92. claude_mpm/core/interactive_session.py +131 -10
  93. claude_mpm/core/logger.py +3 -1
  94. claude_mpm/core/oneshot_session.py +110 -8
  95. claude_mpm/core/output_style_manager.py +173 -43
  96. claude_mpm/core/protocols/__init__.py +23 -0
  97. claude_mpm/core/protocols/runner_protocol.py +103 -0
  98. claude_mpm/core/protocols/session_protocol.py +131 -0
  99. claude_mpm/core/shared/singleton_manager.py +11 -4
  100. claude_mpm/core/system_context.py +38 -0
  101. claude_mpm/core/unified_agent_registry.py +129 -1
  102. claude_mpm/core/unified_config.py +22 -0
  103. claude_mpm/dashboard/static/css/activity.css +69 -69
  104. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  105. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  106. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  107. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  108. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  109. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  110. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  111. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  112. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  113. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  114. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  115. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  116. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  117. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  118. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  119. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  120. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  121. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  122. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  123. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  124. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  125. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  126. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  127. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  128. claude_mpm/dashboard/templates/code_simple.html +23 -23
  129. claude_mpm/dashboard/templates/index.html +18 -18
  130. claude_mpm/experimental/cli_enhancements.py +1 -5
  131. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  132. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  133. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  134. claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
  135. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  136. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  137. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  138. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  139. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  140. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  141. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  142. claude_mpm/models/agent_definition.py +7 -0
  143. claude_mpm/models/git_repository.py +198 -0
  144. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  145. claude_mpm/scripts/start_activity_logging.py +3 -1
  146. claude_mpm/services/agents/agent_builder.py +45 -9
  147. claude_mpm/services/agents/agent_preset_service.py +238 -0
  148. claude_mpm/services/agents/agent_selection_service.py +484 -0
  149. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  150. claude_mpm/services/agents/cache_git_manager.py +621 -0
  151. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  152. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  153. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  154. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  155. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  156. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  157. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  158. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  159. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  160. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  161. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +225 -18
  162. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  163. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  164. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +557 -0
  165. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  166. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  167. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  168. claude_mpm/services/agents/git_source_manager.py +629 -0
  169. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  170. claude_mpm/services/agents/local_template_manager.py +50 -10
  171. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  172. claude_mpm/services/agents/sources/__init__.py +13 -0
  173. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  174. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  175. claude_mpm/services/agents/startup_sync.py +239 -0
  176. claude_mpm/services/agents/toolchain_detector.py +474 -0
  177. claude_mpm/services/analysis/__init__.py +25 -0
  178. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  179. claude_mpm/services/analysis/postmortem_service.py +765 -0
  180. claude_mpm/services/cli/session_pause_manager.py +1 -1
  181. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  182. claude_mpm/services/command_deployment_service.py +200 -6
  183. claude_mpm/services/core/base.py +7 -2
  184. claude_mpm/services/core/interfaces/__init__.py +1 -3
  185. claude_mpm/services/core/interfaces/health.py +1 -4
  186. claude_mpm/services/core/models/__init__.py +2 -11
  187. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  188. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  189. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  190. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  191. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  192. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  193. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  194. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  195. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  196. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  197. claude_mpm/services/event_bus/direct_relay.py +3 -3
  198. claude_mpm/services/event_bus/event_bus.py +36 -3
  199. claude_mpm/services/events/consumers/logging.py +1 -2
  200. claude_mpm/services/git/__init__.py +21 -0
  201. claude_mpm/services/git/git_operations_service.py +494 -0
  202. claude_mpm/services/github/__init__.py +21 -0
  203. claude_mpm/services/github/github_cli_service.py +397 -0
  204. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  205. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  206. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  207. claude_mpm/services/instructions/__init__.py +9 -0
  208. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  209. claude_mpm/services/local_ops/__init__.py +3 -13
  210. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  211. claude_mpm/services/local_ops/health_manager.py +1 -4
  212. claude_mpm/services/local_ops/process_manager.py +1 -1
  213. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  214. claude_mpm/services/mcp_config_manager.py +75 -145
  215. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  216. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  217. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  218. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  219. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  220. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  221. claude_mpm/services/mcp_service_verifier.py +6 -3
  222. claude_mpm/services/memory/optimizer.py +1 -1
  223. claude_mpm/services/model/model_router.py +8 -9
  224. claude_mpm/services/monitor/daemon.py +29 -9
  225. claude_mpm/services/monitor/daemon_manager.py +96 -19
  226. claude_mpm/services/monitor/server.py +2 -2
  227. claude_mpm/services/native_agent_converter.py +356 -0
  228. claude_mpm/services/port_manager.py +1 -1
  229. claude_mpm/services/pr/__init__.py +14 -0
  230. claude_mpm/services/pr/pr_template_service.py +329 -0
  231. claude_mpm/services/project/documentation_manager.py +2 -1
  232. claude_mpm/services/project/project_organizer.py +4 -0
  233. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  234. claude_mpm/services/runner_configuration_service.py +17 -3
  235. claude_mpm/services/self_upgrade_service.py +165 -7
  236. claude_mpm/services/session_management_service.py +16 -4
  237. claude_mpm/services/skills/__init__.py +18 -0
  238. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  239. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  240. claude_mpm/services/skills_config.py +547 -0
  241. claude_mpm/services/skills_deployer.py +955 -0
  242. claude_mpm/services/socketio/handlers/connection.py +1 -1
  243. claude_mpm/services/socketio/handlers/git.py +2 -2
  244. claude_mpm/services/socketio/server/core.py +1 -4
  245. claude_mpm/services/socketio/server/main.py +1 -3
  246. claude_mpm/services/system_instructions_service.py +1 -3
  247. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  248. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  249. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  250. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  251. claude_mpm/services/unified/unified_deployment.py +1 -5
  252. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  253. claude_mpm/services/visualization/__init__.py +1 -5
  254. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  255. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  256. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  257. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  258. claude_mpm/skills/skills_registry.py +0 -1
  259. claude_mpm/templates/questions/__init__.py +38 -0
  260. claude_mpm/templates/questions/base.py +193 -0
  261. claude_mpm/templates/questions/pr_strategy.py +311 -0
  262. claude_mpm/templates/questions/project_init.py +385 -0
  263. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  264. claude_mpm/tools/__main__.py +8 -8
  265. claude_mpm/tools/code_tree_analyzer/analysis.py +1 -1
  266. claude_mpm/utils/agent_dependency_loader.py +80 -13
  267. claude_mpm/utils/agent_filters.py +288 -0
  268. claude_mpm/utils/dependency_cache.py +3 -1
  269. claude_mpm/utils/gitignore.py +244 -0
  270. claude_mpm/utils/log_cleanup.py +3 -3
  271. claude_mpm/utils/migration.py +372 -0
  272. claude_mpm/utils/progress.py +387 -0
  273. claude_mpm/utils/robust_installer.py +3 -5
  274. claude_mpm/utils/structured_questions.py +619 -0
  275. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/METADATA +496 -65
  276. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/RECORD +284 -443
  277. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  278. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  279. claude_mpm/agents/templates/agent-manager.json +0 -273
  280. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  281. claude_mpm/agents/templates/api_qa.json +0 -180
  282. claude_mpm/agents/templates/circuit_breakers.md +0 -638
  283. claude_mpm/agents/templates/clerk-ops.json +0 -235
  284. claude_mpm/agents/templates/code_analyzer.json +0 -101
  285. claude_mpm/agents/templates/content-agent.json +0 -358
  286. claude_mpm/agents/templates/dart_engineer.json +0 -307
  287. claude_mpm/agents/templates/data_engineer.json +0 -225
  288. claude_mpm/agents/templates/documentation.json +0 -211
  289. claude_mpm/agents/templates/engineer.json +0 -210
  290. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  291. claude_mpm/agents/templates/golang_engineer.json +0 -270
  292. claude_mpm/agents/templates/imagemagick.json +0 -264
  293. claude_mpm/agents/templates/java_engineer.json +0 -346
  294. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  295. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  296. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  297. claude_mpm/agents/templates/memory_manager.json +0 -158
  298. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  299. claude_mpm/agents/templates/ops.json +0 -185
  300. claude_mpm/agents/templates/php-engineer.json +0 -287
  301. claude_mpm/agents/templates/product_owner.json +0 -338
  302. claude_mpm/agents/templates/project_organizer.json +0 -140
  303. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  304. claude_mpm/agents/templates/python_engineer.json +0 -387
  305. claude_mpm/agents/templates/qa.json +0 -242
  306. claude_mpm/agents/templates/react_engineer.json +0 -238
  307. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  308. claude_mpm/agents/templates/research.json +0 -188
  309. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  310. claude_mpm/agents/templates/rust_engineer.json +0 -275
  311. claude_mpm/agents/templates/security.json +0 -202
  312. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  313. claude_mpm/agents/templates/ticketing.json +0 -177
  314. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  315. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  316. claude_mpm/agents/templates/version_control.json +0 -157
  317. claude_mpm/agents/templates/web_qa.json +0 -399
  318. claude_mpm/agents/templates/web_ui.json +0 -189
  319. claude_mpm/commands/mpm-tickets.md +0 -102
  320. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  321. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  322. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  323. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  324. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  325. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  326. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  327. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  328. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  329. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  330. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  331. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  332. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  333. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  334. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  335. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  336. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  337. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  338. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  339. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  340. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  341. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  342. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  343. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  344. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  345. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  346. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  347. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  348. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  349. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  350. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  351. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  352. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  353. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  354. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  355. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  356. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  357. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  358. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  359. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  360. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  361. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  362. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  363. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  364. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  365. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  366. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  367. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  368. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  369. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  370. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  371. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  372. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  373. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  374. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  375. claude_mpm/dashboard/static/built/react/events.js +0 -30
  376. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  377. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  378. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  379. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  380. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  381. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  382. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  383. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  384. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  385. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  386. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  387. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  388. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  389. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  390. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  391. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  392. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  393. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  394. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  395. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  396. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  397. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  398. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  399. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  400. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  401. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  402. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  403. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  404. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  405. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  406. claude_mpm/dashboard/static/events.html +0 -607
  407. claude_mpm/dashboard/static/index.html +0 -635
  408. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  409. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  410. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  411. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  412. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  413. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  414. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  415. claude_mpm/dashboard/static/legacy/files.html +0 -747
  416. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  417. claude_mpm/dashboard/static/monitors.html +0 -431
  418. claude_mpm/dashboard/static/production/events.html +0 -659
  419. claude_mpm/dashboard/static/production/main.html +0 -698
  420. claude_mpm/dashboard/static/production/monitors.html +0 -483
  421. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  422. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  423. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  424. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  425. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  426. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  427. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  428. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  429. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  430. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  431. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  432. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  433. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  434. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  435. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  436. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  437. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  438. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  439. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  440. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  441. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  442. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  443. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  444. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  445. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  446. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  447. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  448. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  449. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  450. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  451. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  452. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  453. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  454. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  455. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  456. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  457. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  458. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  459. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  460. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  461. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  462. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  463. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  464. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  465. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  466. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  467. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  468. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  469. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  470. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  471. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  472. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  473. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  474. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  475. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  476. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  477. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  478. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  479. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  480. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  481. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  482. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  483. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  484. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  485. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  486. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  487. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  488. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  489. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  490. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  491. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  492. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  493. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  494. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  495. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  496. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  497. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  498. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  499. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  500. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  501. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  502. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  503. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  504. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  505. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  506. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  507. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  508. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  509. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  510. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  511. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  512. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  513. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  514. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/WHEEL +0 -0
  515. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/entry_points.txt +0 -0
  516. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/licenses/LICENSE +0 -0
  517. {claude_mpm-4.21.3.dist-info → claude_mpm-5.1.9.dist-info}/top_level.txt +0 -0
@@ -12,7 +12,6 @@ MCP service installations.
12
12
  import json
13
13
  import subprocess
14
14
  import sys
15
- from datetime import datetime, timezone
16
15
  from enum import Enum
17
16
  from pathlib import Path
18
17
  from typing import Dict, Optional, Tuple
@@ -698,175 +697,106 @@ class MCPConfigManager:
698
697
 
699
698
  return config
700
699
 
701
- def ensure_mcp_services_configured(self) -> Tuple[bool, str]:
700
+ def check_mcp_services_available(self) -> Tuple[bool, str]:
702
701
  """
703
- Ensure MCP services are configured correctly in ~/.claude.json on startup.
702
+ Check if required MCP services are available in ~/.claude.json (READ-ONLY).
704
703
 
705
- This method checks ALL projects in ~/.claude.json and ensures each has
706
- the correct, static MCP service configurations. It will:
707
- 1. Add missing services
708
- 2. Fix incorrect configurations
709
- 3. Update all projects, not just the current one
704
+ This method performs a READ-ONLY check of MCP service availability.
705
+ It does NOT modify ~/.claude.json. Users should install and configure
706
+ MCP services themselves via pip, npx, or Claude Desktop.
710
707
 
711
708
  Returns:
712
- Tuple of (success, message)
709
+ Tuple of (all_available: bool, message: str)
713
710
  """
714
- updated = False
715
- fixed_services = []
716
- added_services = []
717
-
718
- # Load existing Claude config or create minimal structure
719
- claude_config = {}
720
- if self.claude_config_path.exists():
721
- try:
722
- with self.claude_config_path.open() as f:
723
- claude_config = json.load(f)
724
- except Exception as e:
725
- self.logger.error(f"Error reading {self.claude_config_path}: {e}")
726
- return False, f"Failed to read Claude config: {e}"
711
+ # Get services Claude MPM expects to use (from ~/.claude-mpm/config/)
712
+ expected_services = self.get_filtered_services()
727
713
 
728
- # Ensure projects structure exists
729
- if "projects" not in claude_config:
730
- claude_config["projects"] = {}
731
- updated = True
714
+ if not expected_services:
715
+ return True, "No MCP services configured in Claude MPM"
732
716
 
733
- # Note: fix_mcp_service_issues() is already called during CLI initialization
734
- # Calling it here would duplicate the service health checks
717
+ # Load Claude config (read-only)
718
+ if not self.claude_config_path.exists():
719
+ return False, f"Claude config not found at {self.claude_config_path}"
735
720
 
736
- # Process ALL projects in the config, not just current one
737
- projects_to_update = list(claude_config.get("projects", {}).keys())
721
+ try:
722
+ with self.claude_config_path.open() as f:
723
+ claude_config = json.load(f)
724
+ except Exception as e:
725
+ return False, f"Failed to read Claude config: {e}"
738
726
 
739
- # Also add the current project if not in list
727
+ # Check current project
740
728
  current_project_key = str(self.project_root)
741
- if current_project_key not in projects_to_update:
742
- projects_to_update.append(current_project_key)
743
- # Initialize new project structure
744
- claude_config["projects"][current_project_key] = {
745
- "allowedTools": [],
746
- "history": [],
747
- "mcpContextUris": [],
748
- "mcpServers": {},
749
- "enabledMcpjsonServers": [],
750
- "disabledMcpjsonServers": [],
751
- "hasTrustDialogAccepted": False,
752
- "projectOnboardingSeenCount": 0,
753
- "hasClaudeMdExternalIncludesApproved": False,
754
- "hasClaudeMdExternalIncludesWarningShown": False,
755
- }
756
- updated = True
757
-
758
- # Update each project's MCP configurations
759
- for project_key in projects_to_update:
760
- project_config = claude_config["projects"][project_key]
761
-
762
- # Ensure mcpServers section exists
763
- if "mcpServers" not in project_config:
764
- project_config["mcpServers"] = {}
765
- updated = True
766
-
767
- # Check and fix each service configuration - now filtered by startup config
768
- services_to_configure = self.get_filtered_services()
769
-
770
- for service_name, correct_config in services_to_configure.items():
771
- # Check if service exists and has correct configuration
772
- existing_config = project_config["mcpServers"].get(service_name)
773
-
774
- # Determine if we need to update
775
- needs_update = False
776
- if not existing_config:
777
- # Service is missing
778
- needs_update = True
779
- added_services.append(f"{service_name} in {Path(project_key).name}")
780
- # Service exists, check if configuration is correct
781
- # Compare command and args (the most critical parts)
782
- elif existing_config.get("command") != correct_config.get(
783
- "command"
784
- ) or existing_config.get("args") != correct_config.get("args"):
785
- needs_update = True
786
- fixed_services.append(f"{service_name} in {Path(project_key).name}")
787
-
788
- # Update configuration if needed
789
- if needs_update:
790
- project_config["mcpServers"][service_name] = correct_config
791
- updated = True
792
- self.logger.debug(
793
- f"Updated MCP service config for {service_name} in project {Path(project_key).name}"
794
- )
729
+ project_config = claude_config.get("projects", {}).get(current_project_key)
795
730
 
796
- # Remove disabled services from configuration
797
- if self.config is not None:
798
- # Import Config here to avoid circular import
799
- from ..core.config import Config
731
+ if not project_config:
732
+ missing = list(expected_services.keys())
733
+ return (
734
+ False,
735
+ f"Current project not configured in Claude. Missing services: {', '.join(missing)}",
736
+ )
800
737
 
801
- if isinstance(self.config, Config):
802
- enabled_services = self.config.get(
803
- "startup.enabled_mcp_services", None
804
- )
805
- if enabled_services is not None:
806
- # Remove services that are not in the enabled list
807
- services_to_remove = []
808
- for service_name in project_config["mcpServers"]:
809
- if service_name not in enabled_services:
810
- services_to_remove.append(service_name)
811
-
812
- for service_name in services_to_remove:
813
- del project_config["mcpServers"][service_name]
814
- updated = True
815
- self.logger.debug(
816
- f"Removed disabled service {service_name} from project {Path(project_key).name}"
817
- )
818
-
819
- # Write updated config if changes were made
820
- if updated:
821
- try:
822
- # Create backup if file exists and is large (> 100KB)
823
- if self.claude_config_path.exists():
824
- file_size = self.claude_config_path.stat().st_size
825
- if file_size > 100000: # 100KB
826
- backup_path = self.claude_config_path.with_suffix(
827
- f".backup.{datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')}.json"
828
- )
829
- import shutil
738
+ # Check which services are missing
739
+ mcp_servers = project_config.get("mcpServers", {})
740
+ missing_services = [
741
+ name for name in expected_services if name not in mcp_servers
742
+ ]
830
743
 
831
- shutil.copy2(self.claude_config_path, backup_path)
832
- self.logger.debug(f"Created backup: {backup_path}")
744
+ if missing_services:
745
+ msg = (
746
+ f"Missing MCP services: {', '.join(missing_services)}. "
747
+ f"Install via: pip install {' '.join(missing_services)} "
748
+ f"or configure in Claude Desktop"
749
+ )
750
+ return False, msg
833
751
 
834
- # Write updated config
835
- with self.claude_config_path.open("w") as f:
836
- json.dump(claude_config, f, indent=2)
752
+ return (
753
+ True,
754
+ f"All required MCP services available ({len(expected_services)} services)",
755
+ )
837
756
 
838
- messages = []
839
- if added_services:
840
- messages.append(
841
- f"Added MCP services: {', '.join(added_services[:3])}"
842
- )
843
- if fixed_services:
844
- messages.append(
845
- f"Fixed MCP services: {', '.join(fixed_services[:3])}"
846
- )
757
+ def ensure_mcp_services_configured(self) -> Tuple[bool, str]:
758
+ """
759
+ DEPRECATED: Auto-configuring ~/.claude.json is no longer supported.
847
760
 
848
- if messages:
849
- return True, "; ".join(messages)
850
- return True, "All MCP services already configured correctly"
851
- except Exception as e:
852
- self.logger.error(f"Failed to write Claude config: {e}")
853
- return False, f"Failed to write configuration: {e}"
761
+ As of v4.15.0+, MCP services are user-controlled. Users should install
762
+ and configure MCP services themselves via:
763
+ - pip install <service-name>
764
+ - npx @modelcontextprotocol/...
765
+ - Claude Desktop UI
854
766
 
855
- return True, "All MCP services already configured correctly"
767
+ This method now only performs a read-only check and logs a deprecation warning.
768
+ Use check_mcp_services_available() for read-only checks.
769
+
770
+ Returns:
771
+ Tuple of (success, message)
772
+ """
773
+ import warnings
774
+
775
+ warnings.warn(
776
+ "ensure_mcp_services_configured() is deprecated and will be removed in v6.0.0. "
777
+ "MCP services are now user-controlled. Use check_mcp_services_available() instead.",
778
+ DeprecationWarning,
779
+ stacklevel=2,
780
+ )
781
+
782
+ # Delegate to read-only check
783
+ return self.check_mcp_services_available()
856
784
 
857
785
  def update_mcp_config(self, force_pipx: bool = True) -> Tuple[bool, str]:
858
786
  """
859
- Update the MCP configuration in ~/.claude.json.
787
+ DEPRECATED: Check MCP configuration in ~/.claude.json (READ-ONLY).
788
+
789
+ This method no longer modifies ~/.claude.json. Users should install
790
+ and configure MCP services themselves.
860
791
 
861
792
  Args:
862
- force_pipx: If True, only use pipx installations
793
+ force_pipx: Ignored (kept for backward compatibility)
863
794
 
864
795
  Returns:
865
- Tuple of (success, message)
796
+ Tuple of (success, message) from read-only check
866
797
  """
867
- # This method now delegates to ensure_mcp_services_configured
868
- # since we're updating the Claude config directly
869
- return self.ensure_mcp_services_configured()
798
+ # Delegate to read-only check
799
+ return self.check_mcp_services_available()
870
800
 
871
801
  def update_project_mcp_config(self, force_pipx: bool = True) -> Tuple[bool, str]:
872
802
  """
@@ -215,7 +215,7 @@ class MCPConfiguration(BaseMCPService, IMCPConfiguration):
215
215
  current[part] = {}
216
216
  elif not isinstance(current[part], dict):
217
217
  self.log_warning(
218
- f"Cannot override non-dict config at {'.'.join(config_path[:i+1])}"
218
+ f"Cannot override non-dict config at {'.'.join(config_path[: i + 1])}"
219
219
  )
220
220
  break
221
221
  current = current[part]
@@ -440,15 +440,18 @@ async def auto_initialize_vector_search():
440
440
  )
441
441
  return
442
442
 
443
- # Update the Claude configuration to include the newly installed service
444
- logger.info("📝 Updating Claude configuration...")
445
- config_success, config_msg = (
446
- config_manager.ensure_mcp_services_configured()
447
- )
448
- if config_success:
449
- logger.info(f"✅ {config_msg}")
443
+ # Verify the newly installed service is available
444
+ logger.info("📝 Verifying installation...")
445
+ available, msg = config_manager.check_mcp_services_available()
446
+ if available:
447
+ logger.info(f"✅ {msg}")
450
448
  else:
451
- logger.warning(f"⚠️ Configuration update issue: {config_msg}")
449
+ logger.warning(
450
+ f"⚠️ Service installed but not configured in Claude: {msg}"
451
+ )
452
+ logger.info(
453
+ "💡 Configure via: Claude Desktop > Settings > Developer > Model Context Protocol"
454
+ )
452
455
  else:
453
456
  logger.warning(
454
457
  f"Failed to install mcp-vector-search: {result.stderr}"
@@ -658,15 +661,18 @@ async def auto_initialize_kuzu_memory():
658
661
  )
659
662
  return
660
663
 
661
- # Update the Claude configuration to include the newly installed service
662
- logger.info("📝 Updating Claude configuration...")
663
- config_success, config_msg = (
664
- config_manager.ensure_mcp_services_configured()
665
- )
666
- if config_success:
667
- logger.info(f"✅ {config_msg}")
664
+ # Verify the newly installed service is available
665
+ logger.info("📝 Verifying installation...")
666
+ available, msg = config_manager.check_mcp_services_available()
667
+ if available:
668
+ logger.info(f"✅ {msg}")
668
669
  else:
669
- logger.warning(f"⚠️ Configuration update issue: {config_msg}")
670
+ logger.warning(
671
+ f"⚠️ Service installed but not configured in Claude: {msg}"
672
+ )
673
+ logger.info(
674
+ "💡 Configure via: Claude Desktop > Settings > Developer > Model Context Protocol"
675
+ )
670
676
  else:
671
677
  logger.warning(f"Failed to install kuzu-memory: {result.stderr}")
672
678
  return
@@ -21,12 +21,7 @@ from typing import Any, Callable, Dict, List, Optional, Union
21
21
 
22
22
  # Import from the official MCP package
23
23
  from mcp.server import Server
24
- from mcp.types import (
25
- EmbeddedResource,
26
- ImageContent,
27
- TextContent,
28
- Tool,
29
- )
24
+ from mcp.types import EmbeddedResource, ImageContent, TextContent, Tool
30
25
 
31
26
  from claude_mpm.services.mcp_gateway.core.base import BaseMCPService
32
27
  from claude_mpm.services.mcp_gateway.core.interfaces import (
@@ -65,7 +65,6 @@ def apply_backward_compatibility_patches():
65
65
  and hasattr(request, "params")
66
66
  and request.params is not None
67
67
  ):
68
-
69
68
  # Convert params to dict to check for clientInfo
70
69
  params_dict = request.params
71
70
  if hasattr(params_dict, "model_dump"):
@@ -542,7 +541,6 @@ class SimpleMCPServer:
542
541
 
543
542
  result = f"Python: {sys.version}"
544
543
  elif info_type == "cwd":
545
-
546
544
  result = f"Working Directory: {Path.cwd()}"
547
545
  elif info_type == "all":
548
546
  import datetime
@@ -73,7 +73,7 @@ class LRUCache:
73
73
  if not self.cache:
74
74
  break
75
75
  # Remove least recently used item
76
- removed_key, removed_value = self.cache.popitem(last=False)
76
+ _removed_key, removed_value = self.cache.popitem(last=False)
77
77
  self.current_memory -= removed_value.get("size_bytes", 0)
78
78
 
79
79
  # Add new item
@@ -199,7 +199,9 @@ class KuzuMemoryService(BaseToolAdapter):
199
199
  try:
200
200
  if action == "store":
201
201
  result = await self.store_memory(
202
- params.get("content"), params.get("tags"), {} # metadata
202
+ params.get("content"),
203
+ params.get("tags"),
204
+ {}, # metadata
203
205
  )
204
206
  elif action == "recall":
205
207
  result = await self.recall_memories(
@@ -213,7 +215,9 @@ class KuzuMemoryService(BaseToolAdapter):
213
215
  )
214
216
  elif action == "context":
215
217
  result = await self.get_context(
216
- params.get("query", ""), 2, True # depth # include_related
218
+ params.get("query", ""),
219
+ 2,
220
+ True, # depth # include_related
217
221
  )
218
222
  else:
219
223
  return MCPToolResult(success=False, error=f"Unknown action: {action}")
@@ -620,12 +620,15 @@ class MCPServiceVerifier:
620
620
  return True
621
621
 
622
622
  if "claude-mpm configure" in diagnostic.fix_command:
623
- # Trigger configuration update
623
+ # Check if services are available (read-only)
624
624
  from .mcp_config_manager import MCPConfigManager
625
625
 
626
626
  manager = MCPConfigManager()
627
- success, _ = manager.ensure_mcp_services_configured()
628
- return success
627
+ available, message = manager.check_mcp_services_available()
628
+ if not available:
629
+ # Cannot auto-fix - user must install services manually
630
+ self.logger.warning(f"Cannot auto-fix: {message}")
631
+ return available
629
632
 
630
633
  except Exception as e:
631
634
  self.logger.error(f"Auto-fix failed for {service_name}: {e}")
@@ -618,7 +618,7 @@ class MemoryOptimizer(LoggerMixin):
618
618
  )
619
619
 
620
620
  # Check for similar items
621
- consolidated, consolidated_count = self._consolidate_similar_items(
621
+ _consolidated, consolidated_count = self._consolidate_similar_items(
622
622
  unique_points
623
623
  )
624
624
  if consolidated_count > 0:
@@ -266,7 +266,7 @@ class ModelRouter(BaseService, IModelRouter):
266
266
 
267
267
  # Route based on strategy
268
268
  if self.strategy == RoutingStrategy.CLAUDE_ONLY:
269
- return await self._route_to_claude(content, task, model, **kwargs)
269
+ return await self._route_to_claude(content, task, model=model, **kwargs)
270
270
 
271
271
  if self.strategy in (
272
272
  RoutingStrategy.OLLAMA_ONLY,
@@ -275,13 +275,13 @@ class ModelRouter(BaseService, IModelRouter):
275
275
  return await self._route_to_ollama(
276
276
  content,
277
277
  task,
278
- model,
278
+ model=model,
279
279
  require_success=True,
280
280
  **kwargs,
281
281
  )
282
282
 
283
283
  # AUTO strategy
284
- return await self._route_auto(content, task, model, **kwargs)
284
+ return await self._route_auto(content, task, model=model, **kwargs)
285
285
 
286
286
  async def _route_auto(
287
287
  self,
@@ -308,7 +308,7 @@ class ModelRouter(BaseService, IModelRouter):
308
308
  response = await self._route_to_ollama(
309
309
  content,
310
310
  task,
311
- model,
311
+ model=model,
312
312
  require_success=False,
313
313
  **kwargs,
314
314
  )
@@ -325,7 +325,7 @@ class ModelRouter(BaseService, IModelRouter):
325
325
  # Ollama unavailable or failed - fallback to Claude
326
326
  if self.fallback_enabled:
327
327
  self.log_info("Falling back to Claude")
328
- return await self._route_to_claude(content, task, model, **kwargs)
328
+ return await self._route_to_claude(content, task, model=model, **kwargs)
329
329
  return self._create_error_response(
330
330
  task,
331
331
  model,
@@ -356,8 +356,7 @@ class ModelRouter(BaseService, IModelRouter):
356
356
  if require_success and not await self.ollama_provider.is_available():
357
357
  if self.strategy == RoutingStrategy.PRIVACY_FIRST:
358
358
  error_msg = (
359
- "Ollama not available. Privacy mode enabled - "
360
- "not sending to cloud."
359
+ "Ollama not available. Privacy mode enabled - not sending to cloud."
361
360
  )
362
361
  else:
363
362
  error_msg = "Ollama not available and required by configuration"
@@ -368,7 +367,7 @@ class ModelRouter(BaseService, IModelRouter):
368
367
  self._route_count["ollama"] += 1
369
368
 
370
369
  return await self.ollama_provider.analyze_content(
371
- content, task, model, **kwargs
370
+ content, task, model=model, **kwargs
372
371
  )
373
372
 
374
373
  async def _route_to_claude(
@@ -394,7 +393,7 @@ class ModelRouter(BaseService, IModelRouter):
394
393
  self._route_count["claude"] += 1
395
394
 
396
395
  return await self.claude_provider.analyze_content(
397
- content, task, model, **kwargs
396
+ content, task, model=model, **kwargs
398
397
  )
399
398
 
400
399
  def _create_error_response(
@@ -88,11 +88,12 @@ class UnifiedMonitorDaemon:
88
88
  self.shutdown_event = threading.Event()
89
89
 
90
90
  def _get_default_pid_file(self) -> str:
91
- """Get default PID file path."""
91
+ """Get default PID file path with port number to support multiple daemons."""
92
92
  project_root = Path.cwd()
93
93
  claude_mpm_dir = project_root / ".claude-mpm"
94
94
  claude_mpm_dir.mkdir(exist_ok=True)
95
- return str(claude_mpm_dir / "monitor-daemon.pid")
95
+ # Include port in filename to support multiple daemon instances
96
+ return str(claude_mpm_dir / f"monitor-daemon-{self.port}.pid")
96
97
 
97
98
  def start(self, force_restart: bool = False) -> bool:
98
99
  """Start the unified monitor daemon.
@@ -145,16 +146,26 @@ class UnifiedMonitorDaemon:
145
146
  if self.daemon_manager.is_running():
146
147
  existing_pid = self.daemon_manager.get_pid()
147
148
  if not force_restart:
148
- self.logger.warning(f"Daemon already running with PID {existing_pid}")
149
+ msg = f"Daemon already running on port {self.port} with PID {existing_pid}"
150
+ self.logger.warning(msg)
151
+ # If we're in subprocess mode, this is an error - we should have cleaned up
152
+ if os.environ.get("CLAUDE_MPM_SUBPROCESS_DAEMON") == "1":
153
+ self.logger.error(
154
+ f"SUBPROCESS ERROR: {msg} - This should not happen in subprocess mode!"
155
+ )
149
156
  return False
150
157
  # Force restart was already handled above
151
158
 
152
159
  # Check for our service on the port
153
160
  is_ours, pid = self.daemon_manager.is_our_service()
154
161
  if is_ours and pid and not force_restart:
155
- self.logger.warning(
156
- f"Our service already running on port {self.port} (PID: {pid})"
157
- )
162
+ msg = f"Our service already running on port {self.port} (PID: {pid})"
163
+ self.logger.warning(msg)
164
+ # If we're in subprocess mode, this is an error - we should have cleaned up
165
+ if os.environ.get("CLAUDE_MPM_SUBPROCESS_DAEMON") == "1":
166
+ self.logger.error(
167
+ f"SUBPROCESS ERROR: {msg} - This should not happen in subprocess mode!"
168
+ )
158
169
  return False
159
170
 
160
171
  # Use subprocess approach for clean daemon startup (v4.2.40)
@@ -169,20 +180,29 @@ class UnifiedMonitorDaemon:
169
180
  if os.environ.get("CLAUDE_MPM_SUBPROCESS_DAEMON") == "1":
170
181
  # We're in a subprocess started by start_daemon_subprocess
171
182
  # We need to write the PID file ourselves since parent didn't
172
- self.logger.info("Running in subprocess daemon mode, writing PID file")
183
+ self.logger.info(f"Running in subprocess daemon mode on port {self.port}")
184
+ self.logger.info(f"Subprocess PID: {os.getpid()}")
185
+ self.logger.info(f"PID file path: {self.daemon_manager.pid_file}")
173
186
  self.daemon_manager.write_pid_file()
187
+ self.logger.info("PID file written successfully")
174
188
 
175
189
  # Setup signal handlers for graceful shutdown
176
190
  self._setup_signal_handlers()
191
+ self.logger.info("Signal handlers configured")
177
192
 
178
193
  # Start the server (this will run until shutdown)
194
+ self.logger.info("Starting server in subprocess mode...")
179
195
  try:
180
196
  result = self._run_server()
181
197
  if not result:
182
198
  self.logger.error("Failed to start server in subprocess mode")
199
+ return result
200
+ self.logger.info("Server started successfully in subprocess mode")
183
201
  return result
184
202
  except Exception as e:
185
- self.logger.error(f"Server startup exception in subprocess: {e}")
203
+ self.logger.error(
204
+ f"Server startup exception in subprocess: {e}", exc_info=True
205
+ )
186
206
  raise
187
207
  else:
188
208
  # Legacy fork approach (kept for compatibility but not used by default)
@@ -479,7 +499,7 @@ class UnifiedMonitorDaemon:
479
499
  except OSError:
480
500
  if i < 9:
481
501
  self.logger.debug(
482
- f"Port {self.port} still in use, waiting... ({i+1}/10)"
502
+ f"Port {self.port} still in use, waiting... ({i + 1}/10)"
483
503
  )
484
504
  time.sleep(1)
485
505
  else: