claude-mpm 4.20.3__py3-none-any.whl → 5.1.8__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.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_PM.md +35 -6
- claude_mpm/agents/OUTPUT_STYLE.md +3 -48
- claude_mpm/agents/PM_INSTRUCTIONS.md +1241 -667
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +75 -2
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +1 -4
- claude_mpm/agents/base_agent.json +6 -3
- claude_mpm/agents/base_agent_loader.py +10 -35
- claude_mpm/agents/frontmatter_validator.py +1 -1
- claude_mpm/agents/templates/circuit-breakers.md +1254 -0
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/cli/__init__.py +37 -2
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +188 -30
- claude_mpm/cli/commands/agents.py +959 -36
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/aggregate.py +1 -1
- claude_mpm/cli/commands/analyze.py +3 -3
- claude_mpm/cli/commands/auto_configure.py +537 -239
- claude_mpm/cli/commands/cleanup.py +1 -1
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +924 -45
- claude_mpm/cli/commands/configure_agent_display.py +4 -4
- claude_mpm/cli/commands/configure_navigation.py +63 -46
- claude_mpm/cli/commands/debug.py +12 -12
- claude_mpm/cli/commands/doctor.py +10 -2
- claude_mpm/cli/commands/hook_errors.py +277 -0
- claude_mpm/cli/commands/local_deploy.py +1 -4
- claude_mpm/cli/commands/mcp_install_commands.py +1 -1
- claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
- claude_mpm/cli/commands/mpm_init/core.py +573 -0
- claude_mpm/cli/commands/mpm_init/display.py +341 -0
- claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
- claude_mpm/cli/commands/mpm_init/modes.py +397 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
- claude_mpm/cli/commands/mpm_init_cli.py +396 -0
- claude_mpm/cli/commands/mpm_init_handler.py +67 -1
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +125 -167
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +835 -44
- claude_mpm/cli/executor.py +78 -3
- claude_mpm/cli/interactive/agent_wizard.py +1032 -47
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +256 -4
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
- claude_mpm/cli/parsers/base_parser.py +53 -0
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +145 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/startup.py +564 -108
- claude_mpm/cli/startup_display.py +480 -0
- claude_mpm/cli/utils.py +1 -1
- claude_mpm/cli_module/commands.py +1 -1
- claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
- claude_mpm/commands/mpm-agents-detect.md +9 -0
- claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
- claude_mpm/commands/mpm-agents-recommend.md +9 -0
- claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +17 -2
- claude_mpm/commands/mpm-init.md +28 -3
- claude_mpm/commands/mpm-monitor.md +9 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/mpm-session-resume.md +381 -0
- claude_mpm/commands/mpm-status.md +9 -0
- claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +9 -0
- claude_mpm/commands/mpm.md +11 -0
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/constants.py +13 -0
- claude_mpm/core/api_validator.py +1 -1
- claude_mpm/core/claude_runner.py +19 -35
- claude_mpm/core/config.py +24 -0
- claude_mpm/core/constants.py +1 -1
- claude_mpm/core/framework/__init__.py +3 -16
- claude_mpm/core/framework/loaders/file_loader.py +54 -101
- claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
- claude_mpm/core/framework/processors/metadata_processor.py +1 -1
- claude_mpm/core/hook_error_memory.py +381 -0
- claude_mpm/core/hook_manager.py +41 -2
- claude_mpm/core/interactive_session.py +131 -10
- claude_mpm/core/interfaces.py +56 -1
- claude_mpm/core/logger.py +3 -1
- claude_mpm/core/oneshot_session.py +110 -8
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/shared/singleton_manager.py +11 -4
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/unified_config.py +22 -0
- claude_mpm/dashboard/static/css/activity.css +69 -69
- claude_mpm/dashboard/static/css/connection-status.css +10 -10
- claude_mpm/dashboard/static/css/dashboard.css +15 -15
- claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
- claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
- claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
- claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
- claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
- claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
- claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
- claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
- claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
- claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
- claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
- claude_mpm/dashboard/static/js/connection-manager.js +76 -76
- claude_mpm/dashboard/static/js/dashboard.js +76 -58
- claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
- claude_mpm/dashboard/static/js/socket-client.js +138 -121
- claude_mpm/dashboard/templates/code_simple.html +23 -23
- claude_mpm/dashboard/templates/index.html +18 -18
- claude_mpm/experimental/cli_enhancements.py +1 -5
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
- claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
- claude_mpm/hooks/claude_hooks/installer.py +45 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/hooks/failure_learning/__init__.py +2 -8
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
- claude_mpm/hooks/kuzu_response_hook.py +1 -5
- claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
- claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/scripts/claude-hook-handler.sh +3 -3
- claude_mpm/scripts/start_activity_logging.py +3 -1
- claude_mpm/services/agents/agent_builder.py +45 -9
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
- claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
- claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
- claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
- claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
- claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
- claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- claude_mpm/services/agents/git_source_manager.py +629 -0
- claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
- claude_mpm/services/agents/local_template_manager.py +50 -10
- claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/analysis/__init__.py +25 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/cli/session_pause_manager.py +504 -0
- claude_mpm/services/cli/session_resume_helper.py +36 -16
- claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
- claude_mpm/services/command_deployment_service.py +200 -6
- claude_mpm/services/core/base.py +31 -11
- claude_mpm/services/core/interfaces/__init__.py +1 -3
- claude_mpm/services/core/interfaces/health.py +1 -4
- claude_mpm/services/core/interfaces.py +56 -1
- claude_mpm/services/core/models/__init__.py +2 -11
- claude_mpm/services/core/models/agent_config.py +3 -0
- claude_mpm/services/core/models/process.py +4 -0
- claude_mpm/services/diagnostics/checks/__init__.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
- claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
- claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
- claude_mpm/services/diagnostics/models.py +21 -0
- claude_mpm/services/event_bus/direct_relay.py +3 -3
- claude_mpm/services/event_bus/event_bus.py +36 -3
- claude_mpm/services/event_bus/relay.py +23 -7
- claude_mpm/services/events/consumers/logging.py +1 -2
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +494 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
- claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
- claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
- claude_mpm/services/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +5 -13
- claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
- claude_mpm/services/local_ops/health_manager.py +1 -4
- claude_mpm/services/local_ops/process_manager.py +1 -1
- claude_mpm/services/local_ops/resource_monitor.py +2 -2
- claude_mpm/services/mcp_config_manager.py +75 -145
- claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
- claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
- claude_mpm/services/mcp_gateway/core/process_pool.py +41 -26
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
- claude_mpm/services/mcp_service_verifier.py +6 -3
- claude_mpm/services/memory/failure_tracker.py +19 -4
- claude_mpm/services/memory/optimizer.py +1 -1
- claude_mpm/services/model/model_router.py +8 -9
- claude_mpm/services/monitor/daemon.py +29 -9
- claude_mpm/services/monitor/daemon_manager.py +96 -19
- claude_mpm/services/monitor/server.py +2 -2
- claude_mpm/services/native_agent_converter.py +356 -0
- claude_mpm/services/port_manager.py +1 -1
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/documentation_manager.py +2 -1
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/project/toolchain_analyzer.py +3 -1
- claude_mpm/services/runner_configuration_service.py +17 -3
- claude_mpm/services/self_upgrade_service.py +165 -7
- claude_mpm/services/session_management_service.py +16 -4
- claude_mpm/services/skills/__init__.py +18 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/skills_config.py +547 -0
- claude_mpm/services/skills_deployer.py +955 -0
- claude_mpm/services/socketio/handlers/connection.py +1 -1
- claude_mpm/services/socketio/handlers/git.py +2 -2
- claude_mpm/services/socketio/server/core.py +1 -4
- claude_mpm/services/socketio/server/main.py +1 -3
- claude_mpm/services/system_instructions_service.py +1 -3
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
- claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
- claude_mpm/services/unified/unified_deployment.py +1 -5
- claude_mpm/services/version_control/conflict_resolution.py +6 -4
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/services/visualization/mermaid_generator.py +2 -3
- claude_mpm/skills/__init__.py +3 -3
- claude_mpm/skills/agent_skills_injector.py +42 -49
- claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
- claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
- claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
- claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +13 -12
- claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
- claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
- claude_mpm/skills/bundled/performance-profiling.md +6 -0
- claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
- claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
- claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
- claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +37 -15
- claude_mpm/skills/skills_registry.py +44 -48
- claude_mpm/skills/skills_service.py +117 -108
- claude_mpm/templates/questions/__init__.py +38 -0
- claude_mpm/templates/questions/base.py +193 -0
- claude_mpm/templates/questions/pr_strategy.py +311 -0
- claude_mpm/templates/questions/project_init.py +385 -0
- claude_mpm/templates/questions/ticket_mgmt.py +394 -0
- claude_mpm/tools/__main__.py +8 -8
- claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
- claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
- claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
- claude_mpm/tools/code_tree_analyzer/core.py +380 -0
- claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
- claude_mpm/tools/code_tree_analyzer/events.py +168 -0
- claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
- claude_mpm/tools/code_tree_analyzer/models.py +39 -0
- claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
- claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
- claude_mpm/utils/agent_dependency_loader.py +80 -13
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/dependency_cache.py +3 -1
- claude_mpm/utils/gitignore.py +244 -0
- claude_mpm/utils/log_cleanup.py +3 -3
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +387 -0
- claude_mpm/utils/robust_installer.py +3 -5
- claude_mpm/utils/structured_questions.py +619 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +496 -65
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +328 -416
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
- claude_mpm/agents/templates/agent-manager.json +0 -273
- claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
- claude_mpm/agents/templates/api_qa.json +0 -180
- claude_mpm/agents/templates/circuit_breakers.md +0 -638
- claude_mpm/agents/templates/clerk-ops.json +0 -235
- claude_mpm/agents/templates/code_analyzer.json +0 -101
- claude_mpm/agents/templates/content-agent.json +0 -358
- claude_mpm/agents/templates/dart_engineer.json +0 -307
- claude_mpm/agents/templates/data_engineer.json +0 -225
- claude_mpm/agents/templates/documentation.json +0 -211
- claude_mpm/agents/templates/engineer.json +0 -210
- claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
- claude_mpm/agents/templates/golang_engineer.json +0 -270
- claude_mpm/agents/templates/imagemagick.json +0 -264
- claude_mpm/agents/templates/java_engineer.json +0 -346
- claude_mpm/agents/templates/local_ops_agent.json +0 -1840
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
- claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
- claude_mpm/agents/templates/memory_manager.json +0 -158
- claude_mpm/agents/templates/nextjs_engineer.json +0 -285
- claude_mpm/agents/templates/ops.json +0 -185
- claude_mpm/agents/templates/php-engineer.json +0 -281
- claude_mpm/agents/templates/product_owner.json +0 -338
- claude_mpm/agents/templates/project_organizer.json +0 -140
- claude_mpm/agents/templates/prompt-engineer.json +0 -737
- claude_mpm/agents/templates/python_engineer.json +0 -387
- claude_mpm/agents/templates/qa.json +0 -242
- claude_mpm/agents/templates/react_engineer.json +0 -238
- claude_mpm/agents/templates/refactoring_engineer.json +0 -276
- claude_mpm/agents/templates/research.json +0 -188
- claude_mpm/agents/templates/ruby-engineer.json +0 -280
- claude_mpm/agents/templates/rust_engineer.json +0 -275
- claude_mpm/agents/templates/security.json +0 -202
- claude_mpm/agents/templates/svelte-engineer.json +0 -225
- claude_mpm/agents/templates/ticketing.json +0 -177
- claude_mpm/agents/templates/typescript_engineer.json +0 -285
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
- claude_mpm/agents/templates/version_control.json +0 -157
- claude_mpm/agents/templates/web_qa.json +0 -399
- claude_mpm/agents/templates/web_ui.json +0 -189
- claude_mpm/cli/commands/mpm_init.py +0 -2093
- claude_mpm/commands/mpm-tickets.md +0 -102
- claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
- claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
- claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
- claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
- claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
- claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
- claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
- claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
- claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
- claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/connection-manager.js +0 -536
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/built/react/events.js +0 -30
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
- claude_mpm/dashboard/static/built/shared/logger.js +0 -385
- claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/dist/dashboard.js +0 -2
- claude_mpm/dashboard/static/dist/react/events.js +0 -30
- claude_mpm/dashboard/static/dist/socket-client.js +0 -2
- claude_mpm/dashboard/static/events.html +0 -607
- claude_mpm/dashboard/static/index.html +0 -635
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/js/shared/logger.js +0 -385
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
- claude_mpm/dashboard/static/legacy/activity.html +0 -736
- claude_mpm/dashboard/static/legacy/agents.html +0 -786
- claude_mpm/dashboard/static/legacy/files.html +0 -747
- claude_mpm/dashboard/static/legacy/tools.html +0 -831
- claude_mpm/dashboard/static/monitors.html +0 -431
- claude_mpm/dashboard/static/production/events.html +0 -659
- claude_mpm/dashboard/static/production/main.html +0 -698
- claude_mpm/dashboard/static/production/monitors.html +0 -483
- claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
- claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
- claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
- claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -75
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -184
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -107
- claude_mpm/skills/bundled/collaboration/requesting-code-review/code-reviewer.md +0 -146
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -118
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -177
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -175
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -314
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -227
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -74
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -32
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -328
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -209
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -123
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -304
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -96
- claude_mpm/tools/code_tree_analyzer.py +0 -1825
- /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
- /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
- /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
- /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.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
|
|
700
|
+
def check_mcp_services_available(self) -> Tuple[bool, str]:
|
|
702
701
|
"""
|
|
703
|
-
|
|
702
|
+
Check if required MCP services are available in ~/.claude.json (READ-ONLY).
|
|
704
703
|
|
|
705
|
-
This method
|
|
706
|
-
|
|
707
|
-
|
|
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 (
|
|
709
|
+
Tuple of (all_available: bool, message: str)
|
|
713
710
|
"""
|
|
714
|
-
|
|
715
|
-
|
|
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
|
-
|
|
729
|
-
|
|
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
|
-
#
|
|
734
|
-
|
|
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
|
-
|
|
737
|
-
|
|
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
|
-
#
|
|
727
|
+
# Check current project
|
|
740
728
|
current_project_key = str(self.project_root)
|
|
741
|
-
|
|
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
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
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
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
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
|
-
|
|
832
|
-
|
|
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
|
-
|
|
835
|
-
|
|
836
|
-
|
|
752
|
+
return (
|
|
753
|
+
True,
|
|
754
|
+
f"All required MCP services available ({len(expected_services)} services)",
|
|
755
|
+
)
|
|
837
756
|
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
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
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
#
|
|
868
|
-
|
|
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
|
"""
|
|
@@ -163,17 +163,21 @@ class MCPAutoConfigurator:
|
|
|
163
163
|
Returns:
|
|
164
164
|
True if user agrees, False if declines, None if timeout
|
|
165
165
|
"""
|
|
166
|
-
print("\n" + "=" * 60)
|
|
167
|
-
print("🔧 MCP Gateway Configuration")
|
|
168
|
-
print("=" * 60)
|
|
169
|
-
print(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
print(
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
print("
|
|
176
|
-
print(
|
|
166
|
+
print("\n" + "=" * 60, file=sys.stderr)
|
|
167
|
+
print("🔧 MCP Gateway Configuration", file=sys.stderr)
|
|
168
|
+
print("=" * 60, file=sys.stderr)
|
|
169
|
+
print(
|
|
170
|
+
"\nClaude MPM can automatically configure MCP Gateway for", file=sys.stderr
|
|
171
|
+
)
|
|
172
|
+
print(
|
|
173
|
+
"Claude Code integration. This enables advanced features:", file=sys.stderr
|
|
174
|
+
)
|
|
175
|
+
print(" • File analysis and summarization", file=sys.stderr)
|
|
176
|
+
print(" • System diagnostics", file=sys.stderr)
|
|
177
|
+
print(" • Ticket management", file=sys.stderr)
|
|
178
|
+
print(" • And more...", file=sys.stderr)
|
|
179
|
+
print("\nWould you like to configure it now? (y/n)", file=sys.stderr)
|
|
180
|
+
print(f"(Auto-declining in {timeout} seconds)", file=sys.stderr)
|
|
177
181
|
|
|
178
182
|
# Use threading for cross-platform timeout support
|
|
179
183
|
# Python 3.7+ has queue built-in - no need to check, we require 3.10+
|
|
@@ -203,7 +207,7 @@ class MCPAutoConfigurator:
|
|
|
203
207
|
|
|
204
208
|
if input_thread.is_alive():
|
|
205
209
|
# Timed out
|
|
206
|
-
print("\n(Timed out - declining)")
|
|
210
|
+
print("\n(Timed out - declining)", file=sys.stderr)
|
|
207
211
|
return None
|
|
208
212
|
# Got input
|
|
209
213
|
return user_input in ["y", "yes"]
|
|
@@ -220,7 +224,7 @@ class MCPAutoConfigurator:
|
|
|
220
224
|
if self.claude_config_path.exists():
|
|
221
225
|
backup_path = self._create_backup()
|
|
222
226
|
if backup_path:
|
|
223
|
-
print(f"✅ Backup created: {backup_path}")
|
|
227
|
+
print(f"✅ Backup created: {backup_path}", file=sys.stderr)
|
|
224
228
|
|
|
225
229
|
# Load or create configuration
|
|
226
230
|
config = self._load_or_create_config()
|
|
@@ -232,7 +236,7 @@ class MCPAutoConfigurator:
|
|
|
232
236
|
# Find claude-mpm executable
|
|
233
237
|
executable = self._find_claude_mpm_executable()
|
|
234
238
|
if not executable:
|
|
235
|
-
print("❌ Could not find claude-mpm executable")
|
|
239
|
+
print("❌ Could not find claude-mpm executable", file=sys.stderr)
|
|
236
240
|
return False
|
|
237
241
|
|
|
238
242
|
# Configure MCP server
|
|
@@ -246,20 +250,22 @@ class MCPAutoConfigurator:
|
|
|
246
250
|
with self.claude_config_path.open("w") as f:
|
|
247
251
|
json.dump(config, f, indent=2)
|
|
248
252
|
|
|
249
|
-
print(
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
print("
|
|
253
|
-
print("
|
|
254
|
-
print("
|
|
253
|
+
print(
|
|
254
|
+
f"✅ Configuration saved to: {self.claude_config_path}", file=sys.stderr
|
|
255
|
+
)
|
|
256
|
+
print("\n🎉 MCP Gateway configured successfully!", file=sys.stderr)
|
|
257
|
+
print("\nNext steps:", file=sys.stderr)
|
|
258
|
+
print("1. Restart Claude Code (if running)", file=sys.stderr)
|
|
259
|
+
print("2. Look for the MCP icon in the interface", file=sys.stderr)
|
|
260
|
+
print("3. Try @claude-mpm-gateway in a conversation", file=sys.stderr)
|
|
255
261
|
|
|
256
262
|
return True
|
|
257
263
|
|
|
258
264
|
except Exception as e:
|
|
259
265
|
self.logger.error(f"Auto-configuration failed: {e}")
|
|
260
|
-
print(f"❌ Configuration failed: {e}")
|
|
261
|
-
print("\nYou can configure manually with:")
|
|
262
|
-
print(" claude-mpm mcp install")
|
|
266
|
+
print(f"❌ Configuration failed: {e}", file=sys.stderr)
|
|
267
|
+
print("\nYou can configure manually with:", file=sys.stderr)
|
|
268
|
+
print(" claude-mpm mcp install", file=sys.stderr)
|
|
263
269
|
return False
|
|
264
270
|
|
|
265
271
|
def _create_backup(self) -> Optional[Path]:
|
|
@@ -344,8 +350,8 @@ class MCPAutoConfigurator:
|
|
|
344
350
|
if user_choice:
|
|
345
351
|
return self.auto_configure()
|
|
346
352
|
if user_choice is False: # User explicitly said no
|
|
347
|
-
print("\n📝 You can configure MCP later with:")
|
|
348
|
-
print(" claude-mpm mcp install")
|
|
353
|
+
print("\n📝 You can configure MCP later with:", file=sys.stderr)
|
|
354
|
+
print(" claude-mpm mcp install", file=sys.stderr)
|
|
349
355
|
# If timeout (None), don't show additional message
|
|
350
356
|
return False
|
|
351
357
|
|
|
@@ -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
|
-
#
|
|
444
|
-
logger.info("📝
|
|
445
|
-
|
|
446
|
-
|
|
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(
|
|
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
|
-
#
|
|
662
|
-
logger.info("📝
|
|
663
|
-
|
|
664
|
-
|
|
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(
|
|
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
|
|
@@ -864,7 +870,7 @@ def _prompt_kuzu_update(current: str, latest: str) -> None:
|
|
|
864
870
|
# Check if running in a non-interactive context
|
|
865
871
|
try:
|
|
866
872
|
if confirm_operation(message):
|
|
867
|
-
print("🚀 Updating kuzu-memory...")
|
|
873
|
+
print("🚀 Updating kuzu-memory...", file=sys.stderr)
|
|
868
874
|
try:
|
|
869
875
|
result = subprocess.run(
|
|
870
876
|
["pipx", "upgrade", "kuzu-memory"],
|
|
@@ -874,28 +880,37 @@ def _prompt_kuzu_update(current: str, latest: str) -> None:
|
|
|
874
880
|
check=False,
|
|
875
881
|
)
|
|
876
882
|
if result.returncode == 0:
|
|
877
|
-
print("✅ Successfully updated kuzu-memory!")
|
|
883
|
+
print("✅ Successfully updated kuzu-memory!", file=sys.stderr)
|
|
878
884
|
logger.info(f"Updated kuzu-memory from {current} to {latest}")
|
|
879
885
|
else:
|
|
880
|
-
print(f"⚠️ Update failed: {result.stderr}")
|
|
886
|
+
print(f"⚠️ Update failed: {result.stderr}", file=sys.stderr)
|
|
881
887
|
logger.warning(f"kuzu-memory update failed: {result.stderr}")
|
|
882
888
|
except subprocess.TimeoutExpired:
|
|
883
|
-
print("⚠️ Update timed out. Please try again later.")
|
|
889
|
+
print("⚠️ Update timed out. Please try again later.", file=sys.stderr)
|
|
884
890
|
logger.warning("kuzu-memory update timed out")
|
|
885
891
|
except Exception as e:
|
|
886
|
-
print(f"⚠️ Update failed: {e}")
|
|
892
|
+
print(f"⚠️ Update failed: {e}", file=sys.stderr)
|
|
887
893
|
logger.warning(f"kuzu-memory update error: {e}")
|
|
888
894
|
else:
|
|
889
895
|
# User declined update
|
|
890
|
-
print("\n To skip this version permanently, run:")
|
|
891
|
-
print(
|
|
892
|
-
|
|
893
|
-
|
|
896
|
+
print("\n To skip this version permanently, run:", file=sys.stderr)
|
|
897
|
+
print(
|
|
898
|
+
f" claude-mpm config set-skip-version kuzu-memory {latest}",
|
|
899
|
+
file=sys.stderr,
|
|
900
|
+
)
|
|
901
|
+
print(" To disable update checks for kuzu-memory:", file=sys.stderr)
|
|
902
|
+
print(
|
|
903
|
+
" claude-mpm config disable-update-checks kuzu-memory",
|
|
904
|
+
file=sys.stderr,
|
|
905
|
+
)
|
|
894
906
|
|
|
895
907
|
# Ask if user wants to skip this version
|
|
896
908
|
if confirm_operation("\n Skip this version in future checks?"):
|
|
897
909
|
UpdatePreferences.set_skip_version("kuzu-memory", latest)
|
|
898
|
-
print(
|
|
910
|
+
print(
|
|
911
|
+
f" Version {latest} will be skipped in future checks.",
|
|
912
|
+
file=sys.stderr,
|
|
913
|
+
)
|
|
899
914
|
except (KeyboardInterrupt, EOFError):
|
|
900
915
|
# User interrupted or input not available
|
|
901
916
|
pass
|
|
@@ -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
|
-
|
|
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
|
|
@@ -161,12 +161,17 @@ class ExternalMCPService(BaseToolAdapter):
|
|
|
161
161
|
|
|
162
162
|
if interactive:
|
|
163
163
|
# Show user-friendly installation prompt
|
|
164
|
-
print(f"\n⚠️ {self.package_name} not found")
|
|
165
|
-
print(
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
print("
|
|
164
|
+
print(f"\n⚠️ {self.package_name} not found", file=sys.stderr)
|
|
165
|
+
print(
|
|
166
|
+
"This package enables enhanced functionality (optional).",
|
|
167
|
+
file=sys.stderr,
|
|
168
|
+
)
|
|
169
|
+
print("\nInstallation options:", file=sys.stderr)
|
|
170
|
+
print(
|
|
171
|
+
"1. Install via pip (recommended for this project)", file=sys.stderr
|
|
172
|
+
)
|
|
173
|
+
print("2. Install via pipx (isolated, system-wide)", file=sys.stderr)
|
|
174
|
+
print("3. Skip (continue without this package)", file=sys.stderr)
|
|
170
175
|
|
|
171
176
|
try:
|
|
172
177
|
choice = input("\nChoose option (1/2/3) [1]: ").strip() or "1"
|
|
@@ -180,7 +185,7 @@ class ExternalMCPService(BaseToolAdapter):
|
|
|
180
185
|
)
|
|
181
186
|
return False
|
|
182
187
|
except (EOFError, KeyboardInterrupt):
|
|
183
|
-
print("\nInstallation cancelled")
|
|
188
|
+
print("\nInstallation cancelled", file=sys.stderr)
|
|
184
189
|
return False
|
|
185
190
|
else:
|
|
186
191
|
# Non-interactive: default to pip
|
|
@@ -201,7 +206,7 @@ class ExternalMCPService(BaseToolAdapter):
|
|
|
201
206
|
async def _install_via_pip(self) -> bool:
|
|
202
207
|
"""Install package via pip."""
|
|
203
208
|
try:
|
|
204
|
-
print(f"\n📦 Installing {self.package_name} via pip...")
|
|
209
|
+
print(f"\n📦 Installing {self.package_name} via pip...", file=sys.stderr)
|
|
205
210
|
result = subprocess.run(
|
|
206
211
|
[sys.executable, "-m", "pip", "install", self.package_name],
|
|
207
212
|
capture_output=True,
|
|
@@ -211,21 +216,21 @@ class ExternalMCPService(BaseToolAdapter):
|
|
|
211
216
|
)
|
|
212
217
|
|
|
213
218
|
if result.returncode == 0:
|
|
214
|
-
print(f"✓ Successfully installed {self.package_name}")
|
|
219
|
+
print(f"✓ Successfully installed {self.package_name}", file=sys.stderr)
|
|
215
220
|
self.logger.info(f"Successfully installed {self.package_name} via pip")
|
|
216
221
|
return True
|
|
217
222
|
|
|
218
223
|
error_msg = result.stderr.strip() if result.stderr else "Unknown error"
|
|
219
|
-
print(f"✗ Installation failed: {error_msg}")
|
|
224
|
+
print(f"✗ Installation failed: {error_msg}", file=sys.stderr)
|
|
220
225
|
self.logger.error(f"Failed to install {self.package_name}: {error_msg}")
|
|
221
226
|
return False
|
|
222
227
|
|
|
223
228
|
except subprocess.TimeoutExpired:
|
|
224
|
-
print("✗ Installation timed out")
|
|
229
|
+
print("✗ Installation timed out", file=sys.stderr)
|
|
225
230
|
self.logger.error(f"Installation of {self.package_name} timed out")
|
|
226
231
|
return False
|
|
227
232
|
except Exception as e:
|
|
228
|
-
print(f"✗ Installation error: {e}")
|
|
233
|
+
print(f"✗ Installation error: {e}", file=sys.stderr)
|
|
229
234
|
self.logger.error(f"Error installing {self.package_name}: {e}")
|
|
230
235
|
return False
|
|
231
236
|
|
|
@@ -242,12 +247,12 @@ class ExternalMCPService(BaseToolAdapter):
|
|
|
242
247
|
)
|
|
243
248
|
|
|
244
249
|
if pipx_check.returncode != 0:
|
|
245
|
-
print("✗ pipx is not installed")
|
|
246
|
-
print("Install pipx first: python -m pip install pipx")
|
|
250
|
+
print("✗ pipx is not installed", file=sys.stderr)
|
|
251
|
+
print("Install pipx first: python -m pip install pipx", file=sys.stderr)
|
|
247
252
|
self.logger.error("pipx not available for installation")
|
|
248
253
|
return False
|
|
249
254
|
|
|
250
|
-
print(f"\n📦 Installing {self.package_name} via pipx...")
|
|
255
|
+
print(f"\n📦 Installing {self.package_name} via pipx...", file=sys.stderr)
|
|
251
256
|
result = subprocess.run(
|
|
252
257
|
["pipx", "install", self.package_name],
|
|
253
258
|
capture_output=True,
|
|
@@ -257,26 +262,26 @@ class ExternalMCPService(BaseToolAdapter):
|
|
|
257
262
|
)
|
|
258
263
|
|
|
259
264
|
if result.returncode == 0:
|
|
260
|
-
print(f"✓ Successfully installed {self.package_name}")
|
|
265
|
+
print(f"✓ Successfully installed {self.package_name}", file=sys.stderr)
|
|
261
266
|
self.logger.info(f"Successfully installed {self.package_name} via pipx")
|
|
262
267
|
return True
|
|
263
268
|
|
|
264
269
|
error_msg = result.stderr.strip() if result.stderr else "Unknown error"
|
|
265
|
-
print(f"✗ Installation failed: {error_msg}")
|
|
270
|
+
print(f"✗ Installation failed: {error_msg}", file=sys.stderr)
|
|
266
271
|
self.logger.error(f"Failed to install {self.package_name}: {error_msg}")
|
|
267
272
|
return False
|
|
268
273
|
|
|
269
274
|
except FileNotFoundError:
|
|
270
|
-
print("✗ pipx command not found")
|
|
271
|
-
print("Install pipx first: python -m pip install pipx")
|
|
275
|
+
print("✗ pipx command not found", file=sys.stderr)
|
|
276
|
+
print("Install pipx first: python -m pip install pipx", file=sys.stderr)
|
|
272
277
|
self.logger.error("pipx command not found")
|
|
273
278
|
return False
|
|
274
279
|
except subprocess.TimeoutExpired:
|
|
275
|
-
print("✗ Installation timed out")
|
|
280
|
+
print("✗ Installation timed out", file=sys.stderr)
|
|
276
281
|
self.logger.error(f"Installation of {self.package_name} timed out")
|
|
277
282
|
return False
|
|
278
283
|
except Exception as e:
|
|
279
|
-
print(f"✗ Installation error: {e}")
|
|
284
|
+
print(f"✗ Installation error: {e}", file=sys.stderr)
|
|
280
285
|
self.logger.error(f"Error installing {self.package_name}: {e}")
|
|
281
286
|
return False
|
|
282
287
|
|