claude-mpm 4.4.10__py3-none-any.whl → 4.4.12__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.
claude_mpm/VERSION CHANGED
@@ -1 +1 @@
1
- 4.4.10
1
+ 4.4.12
@@ -67,12 +67,45 @@
67
67
  ✓ TodoWrite - For tracking delegated work
68
68
  ✓ Read - ONLY for reading ONE file maximum (more = violation)
69
69
  ✓ Bash - ONLY for `ls`, `pwd` (NOT for investigation)
70
+ ✓ SlashCommand - For executing Claude MPM commands (see MPM Commands section below)
70
71
  ✓ mcp__mcp-vector-search__* - For quick code search BEFORE delegation (helps better task definition)
71
72
  ❌ Grep/Glob - FORBIDDEN for PM (delegate to Research for deep investigation)
72
73
  ❌ WebSearch/WebFetch - FORBIDDEN for PM (delegate to Research)
73
74
 
74
75
  **VIOLATION TRACKING ACTIVE**: Each violation logged, escalated, and reported.
75
76
 
77
+ ## CLAUDE MPM SLASH COMMANDS
78
+
79
+ **IMPORTANT**: Claude MPM has special slash commands that are NOT file paths. These are framework commands that must be executed using the SlashCommand tool.
80
+
81
+ ### Common MPM Commands
82
+ These commands start with `/mpm-` and are Claude MPM system commands:
83
+ - `/mpm-doctor` - Run system diagnostics (use SlashCommand tool)
84
+ - `/mpm-init` - Initialize MPM project (use SlashCommand tool)
85
+ - `/mpm-status` - Check MPM service status (use SlashCommand tool)
86
+ - `/mpm-monitor` - Control monitoring services (use SlashCommand tool)
87
+ - `/mpm-browser-monitor` - Control browser monitoring (use SlashCommand tool)
88
+
89
+ ### How to Execute MPM Commands
90
+ ✅ **CORRECT**: Use SlashCommand tool
91
+ ```
92
+ SlashCommand: command="/mpm-doctor"
93
+ SlashCommand: command="/mpm-monitor start"
94
+ ```
95
+
96
+ ❌ **WRONG**: Treating as file paths or bash commands
97
+ ```
98
+ Bash: ./mpm-doctor # WRONG - not a file
99
+ Bash: /mpm-doctor # WRONG - not a file path
100
+ Read: /mpm-doctor # WRONG - not a file to read
101
+ ```
102
+
103
+ ### Recognition Rules
104
+ - If user mentions `/mpm-*` → It's a Claude MPM command → Use SlashCommand
105
+ - If command starts with slash and is NOT a file path → Check if it's an MPM command
106
+ - MPM commands are system operations, NOT files or scripts
107
+ - Always use SlashCommand tool for these operations
108
+
76
109
  ## NO ASSERTION WITHOUT VERIFICATION RULE
77
110
 
78
111
  **CRITICAL**: PM MUST NEVER make claims without evidence from agents.
@@ -139,6 +172,7 @@
139
172
  | "what is", "how does", "where is" | "I'll have Research investigate" | Research |
140
173
  | "error", "bug", "issue" | "I'll have QA reproduce this" | QA |
141
174
  | "slow", "performance" | "I'll have QA benchmark this" | QA |
175
+ | "/mpm-doctor", "/mpm-status", etc | "I'll run the MPM command" | Use SlashCommand tool (NOT bash) |
142
176
  | ANY question about code | "I'll have Research examine this" | Research |
143
177
 
144
178
  ### 🔴 CIRCUIT BREAKER - IMPLEMENTATION DETECTION 🔴
@@ -222,6 +222,32 @@ def _check_mcp_auto_configuration():
222
222
  logger = get_logger("cli")
223
223
  logger.debug(f"MCP auto-configuration check failed: {e}")
224
224
 
225
+ # Also ensure MCP services are properly configured in ~/.claude.json
226
+ # This fixes incorrect paths and adds missing services
227
+ try:
228
+ from ..services.mcp_config_manager import MCPConfigManager
229
+ from ..core.logger import get_logger
230
+
231
+ logger = get_logger("cli")
232
+ mcp_manager = MCPConfigManager()
233
+
234
+ # Fix any corrupted installations first
235
+ fix_success, fix_message = mcp_manager.fix_mcp_service_issues()
236
+ if fix_message and "Fixed:" in fix_message:
237
+ logger.info(f"MCP service fixes applied: {fix_message}")
238
+
239
+ # Ensure all services are configured correctly
240
+ config_success, config_message = mcp_manager.ensure_mcp_services_configured()
241
+ if config_message and "Added MCP services" in config_message:
242
+ logger.info(f"MCP services configured: {config_message}")
243
+
244
+ except Exception as e:
245
+ # Non-critical - log but don't fail
246
+ from ..core.logger import get_logger
247
+
248
+ logger = get_logger("cli")
249
+ logger.debug(f"MCP services configuration update failed: {e}")
250
+
225
251
 
226
252
  def _verify_mcp_gateway_startup():
227
253
  """
@@ -51,9 +51,9 @@ def run_diagnostics(
51
51
  - warning_count: int - number of warnings found
52
52
  - message: str - optional error message if failed
53
53
  """
54
- from claude_mpm.core.logging_utils import get_logger
54
+ from claude_mpm.core.logging_utils import get_logger
55
55
 
56
- logger = get_logger(__name__)
56
+ logger = get_logger(__name__)
57
57
 
58
58
  # Create diagnostic runner
59
59
  runner = DiagnosticRunner(verbose=verbose, fix=fix)
@@ -871,38 +871,51 @@ class MCPServicesCheck(BaseDiagnosticCheck):
871
871
  def _check_gateway_configuration(self) -> DiagnosticResult:
872
872
  """Check if MCP services are configured in the gateway."""
873
873
  try:
874
- # Check MCP config file
875
- config_dir = Path.home() / ".claude" / "mcp"
876
- config_file = config_dir / "config.json"
874
+ # Check Claude config file (the correct location for Claude Code)
875
+ config_file = Path.home() / ".claude.json"
877
876
 
878
877
  if not config_file.exists():
879
878
  return DiagnosticResult(
880
879
  category="MCP Gateway Configuration",
881
880
  status=DiagnosticStatus.WARNING,
882
- message="MCP configuration file not found",
881
+ message="Claude configuration file not found",
883
882
  details={"config_path": str(config_file), "exists": False},
884
883
  fix_command="claude-mpm configure --mcp",
885
- fix_description="Initialize MCP configuration",
884
+ fix_description="Initialize Claude configuration",
886
885
  )
887
886
 
888
887
  with open(config_file) as f:
889
888
  config = json.load(f)
890
889
 
891
- # Check for external services configuration
892
- external_services = config.get("external_services", {})
890
+ # Get the current project configuration
891
+ from pathlib import Path
892
+ import os
893
+
894
+ current_project = str(Path.cwd())
895
+
896
+ # Check if current project has MCP servers configured
897
+ projects = config.get("projects", {})
898
+ if current_project not in projects:
899
+ return DiagnosticResult(
900
+ category="MCP Gateway Configuration",
901
+ status=DiagnosticStatus.WARNING,
902
+ message="Current project not configured in Claude",
903
+ details={"config_path": str(config_file), "project": current_project},
904
+ fix_command="claude-mpm configure --mcp",
905
+ fix_description="Configure MCP services for current project",
906
+ )
907
+
908
+ project_config = projects[current_project]
909
+ mcp_servers = project_config.get("mcpServers", {})
910
+
893
911
  configured_services = []
894
912
  missing_services = []
895
913
 
896
914
  for service_name in self.MCP_SERVICES:
897
- if service_name in external_services:
915
+ if service_name in mcp_servers:
898
916
  configured_services.append(service_name)
899
917
  else:
900
- # Also check if it's in the services list directly
901
- services = config.get("services", [])
902
- if any(s.get("name") == service_name for s in services):
903
- configured_services.append(service_name)
904
- else:
905
- missing_services.append(service_name)
918
+ missing_services.append(service_name)
906
919
 
907
920
  details = {
908
921
  "config_path": str(config_file),
@@ -43,27 +43,28 @@ class MCPConfigManager:
43
43
 
44
44
  # Static known-good MCP service configurations
45
45
  # These are the correct, tested configurations that work reliably
46
+ # Note: Commands will be resolved to full paths dynamically in get_static_service_config()
46
47
  STATIC_MCP_CONFIGS = {
47
48
  "kuzu-memory": {
48
49
  "type": "stdio",
49
- "command": "kuzu-memory", # Use direct binary, will be resolved to full path
50
+ "command": "kuzu-memory", # Will be resolved to full path
50
51
  "args": ["mcp", "serve"] # v1.1.0+ uses 'mcp serve' command
51
52
  },
52
53
  "mcp-ticketer": {
53
54
  "type": "stdio",
54
- "command": "mcp-ticketer", # Use direct binary to preserve injected dependencies
55
+ "command": "mcp-ticketer", # Will be resolved to full path
55
56
  "args": ["mcp"]
56
57
  },
57
58
  "mcp-browser": {
58
59
  "type": "stdio",
59
- "command": "mcp-browser", # Use direct binary
60
+ "command": "mcp-browser", # Will be resolved to full path
60
61
  "args": ["mcp"],
61
62
  "env": {"MCP_BROWSER_HOME": str(Path.home() / ".mcp-browser")}
62
63
  },
63
64
  "mcp-vector-search": {
64
65
  "type": "stdio",
65
- # Use pipx venv's Python directly for module execution
66
- "command": str(Path.home() / ".local" / "pipx" / "venvs" / "mcp-vector-search" / "bin" / "python"),
66
+ # Special handling: needs Python interpreter from pipx venv
67
+ "command": "python", # Will be resolved to pipx venv Python
67
68
  "args": ["-m", "mcp_vector_search.mcp.server", "{project_root}"],
68
69
  "env": {}
69
70
  }
@@ -326,42 +327,51 @@ class MCPConfigManager:
326
327
  if service_name in ["kuzu-memory", "mcp-ticketer", "mcp-browser"]:
327
328
  # Try to find the full path of the binary
328
329
  binary_name = config["command"]
329
- binary_path = shutil.which(binary_name)
330
-
331
- if not binary_path:
332
- # Try common installation locations
333
- possible_paths = [
334
- f"/opt/homebrew/bin/{binary_name}",
335
- f"/usr/local/bin/{binary_name}",
336
- str(Path.home() / ".local" / "bin" / binary_name),
337
- ]
338
- for path in possible_paths:
339
- if Path(path).exists():
340
- binary_path = path
341
- break
330
+
331
+ # First check pipx location
332
+ pipx_bin = Path.home() / ".local" / "pipx" / "venvs" / service_name / "bin" / binary_name
333
+ if pipx_bin.exists():
334
+ binary_path = str(pipx_bin)
335
+ else:
336
+ # Try which command
337
+ binary_path = shutil.which(binary_name)
338
+
339
+ if not binary_path:
340
+ # Try common installation locations
341
+ possible_paths = [
342
+ Path.home() / ".local" / "bin" / binary_name,
343
+ Path("/opt/homebrew/bin") / binary_name,
344
+ Path("/usr/local/bin") / binary_name,
345
+ ]
346
+ for path in possible_paths:
347
+ if path.exists():
348
+ binary_path = str(path)
349
+ break
342
350
 
343
351
  if binary_path:
344
352
  config["command"] = binary_path
345
- # If still not found, keep the binary name and hope it's in PATH
353
+ else:
354
+ # Fall back to pipx run method if binary not found
355
+ self.logger.debug(f"Could not find {binary_name}, using pipx run fallback")
356
+ config["command"] = "pipx"
357
+ config["args"] = ["run", service_name] + config["args"]
346
358
 
347
- # Resolve pipx command to full path if needed
348
- elif config.get("command") == "pipx":
359
+ # Resolve pipx command to full path if needed (for fallback configs)
360
+ if config.get("command") == "pipx":
349
361
  pipx_path = shutil.which("pipx")
350
362
  if not pipx_path:
351
363
  # Try common pipx locations
352
- for possible_path in [
353
- "/opt/homebrew/bin/pipx",
354
- "/usr/local/bin/pipx",
355
- str(Path.home() / ".local" / "bin" / "pipx"),
356
- ]:
357
- if Path(possible_path).exists():
358
- pipx_path = possible_path
364
+ possible_pipx_paths = [
365
+ Path.home() / ".local" / "bin" / "pipx",
366
+ Path("/opt/homebrew/bin/pipx"),
367
+ Path("/usr/local/bin/pipx"),
368
+ ]
369
+ for path in possible_pipx_paths:
370
+ if path.exists():
371
+ pipx_path = str(path)
359
372
  break
360
373
  if pipx_path:
361
374
  config["command"] = pipx_path
362
- else:
363
- # Keep as "pipx" and hope it's in PATH when executed
364
- config["command"] = "pipx"
365
375
 
366
376
  # Handle user-specific paths for mcp-vector-search
367
377
  if service_name == "mcp-vector-search":
@@ -369,25 +379,31 @@ class MCPConfigManager:
369
379
  home = Path.home()
370
380
  python_path = home / ".local" / "pipx" / "venvs" / "mcp-vector-search" / "bin" / "python"
371
381
 
372
- # Check if the Python interpreter exists, if not fallback to pipx run
382
+ # Check if the Python interpreter exists
373
383
  if python_path.exists():
374
384
  config["command"] = str(python_path)
375
385
  else:
376
386
  # Fallback to pipx run method
377
- import shutil
378
387
  pipx_path = shutil.which("pipx")
379
388
  if not pipx_path:
380
389
  # Try common pipx locations
381
- for possible_path in [
382
- "/opt/homebrew/bin/pipx",
383
- "/usr/local/bin/pipx",
384
- str(Path.home() / ".local" / "bin" / "pipx"),
385
- ]:
386
- if Path(possible_path).exists():
387
- pipx_path = possible_path
390
+ possible_pipx_paths = [
391
+ Path.home() / ".local" / "bin" / "pipx",
392
+ Path("/opt/homebrew/bin/pipx"),
393
+ Path("/usr/local/bin/pipx"),
394
+ ]
395
+ for path in possible_pipx_paths:
396
+ if path.exists():
397
+ pipx_path = str(path)
388
398
  break
389
- config["command"] = pipx_path if pipx_path else "pipx"
390
- config["args"] = ["run", "--spec", "mcp-vector-search", "python"] + config["args"]
399
+
400
+ if pipx_path:
401
+ config["command"] = pipx_path
402
+ else:
403
+ config["command"] = "pipx" # Hope it's in PATH
404
+
405
+ # Use pipx run with the spec argument
406
+ config["args"] = ["run", "--spec", "mcp-vector-search", "python", "-m", "mcp_vector_search.mcp.server", "{project_root}"]
391
407
 
392
408
  # Use provided project path or current project
393
409
  project_root = project_path if project_path else str(self.project_root)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 4.4.10
3
+ Version: 4.4.12
4
4
  Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
5
5
  Author-email: Bob Matsuoka <bob@matsuoka.com>
6
6
  Maintainer: Claude MPM Team
@@ -1,5 +1,5 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
2
- claude_mpm/VERSION,sha256=sWbYzlZISr7BptNTC_uujNYYcywtBRTxU-Nf7DT-UHA,7
2
+ claude_mpm/VERSION,sha256=-NhDVOKMNRngJz_F0f4LJhvjU2fK5Bea3S1dC9bmkLk,7
3
3
  claude_mpm/__init__.py,sha256=lyTZAYGH4DTaFGLRNWJKk5Q5oTjzN5I6AXmfVX-Jff0,1512
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
5
  claude_mpm/constants.py,sha256=cChN3myrAcF3jC-6DvHnBFTEnwlDk-TAsIXPvUZr_yw,5953
@@ -15,7 +15,7 @@ claude_mpm/agents/BASE_RESEARCH.md,sha256=2DZhDd5XxWWtsyNTBIwvtNWBu1JpFy5R5SAZDH
15
15
  claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md,sha256=zQZhrhVq9NLCtSjVX-aC0xcgueemSuPhKyv0SjEOyIQ,25852
16
16
  claude_mpm/agents/MEMORY.md,sha256=KbRwY_RYdOvTvFC2DD-ATfwjHkQWJ5PIjlGws_7RmjI,3307
17
17
  claude_mpm/agents/OUTPUT_STYLE.md,sha256=IYbo4jmICihrfnChbdrRpwVk4VobCcNyYqZqd53VXMk,533
18
- claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=wTjmrnJjGo3bFvQQcj1VJ1wEFgYePaOe3NFGa_1vf50,25963
18
+ claude_mpm/agents/PM_INSTRUCTIONS.md,sha256=bdf38c2PS0qrXg1wq2lFDKAzkCmUQs1L8uTVwJk_TlY,27438
19
19
  claude_mpm/agents/WORKFLOW.md,sha256=m4hjQNX8tZKNlyVPjvGJJXc-UG3yzkscmu9Nwfcddsw,2373
20
20
  claude_mpm/agents/__init__.py,sha256=jRFxvV_DIZ-NdENa-703Xu3YpwvlQj6yv-mQ6FgmldM,3220
21
21
  claude_mpm/agents/agent-template.yaml,sha256=mRlz5Yd0SmknTeoJWgFkZXzEF5T7OmGBJGs2-KPT93k,1969
@@ -61,7 +61,7 @@ claude_mpm/agents/templates/.claude-mpm/memories/README.md,sha256=vEiG7cPjHRZfwX
61
61
  claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md,sha256=KMZSJrQi-wHOwfl2C0m3A4PpC4QuBtDolAtVybGahKc,77
62
62
  claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md,sha256=UBm4BycXtdaa-_l1VCh0alTGGOUSsnCbpKwbFuI-mUY,2219
63
63
  claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md,sha256=oPvFSYFnmJ4TkbTe4AZnNHWaJMJ-xqZP2WM6scUKQKo,13089
64
- claude_mpm/cli/__init__.py,sha256=TTtZNHx70miCIk-6ekKZiawOA9a0q1-HmVDecljZ3ZA,19317
64
+ claude_mpm/cli/__init__.py,sha256=F9t78ZqT0g_DB5ay1BB93mkyxdM0De_Z6aRs3k-wOyM,20396
65
65
  claude_mpm/cli/__main__.py,sha256=WnVGBwe10InxuZjJRFdwuMF6Gh16aXox6zFgxr0sRXk,847
66
66
  claude_mpm/cli/parser.py,sha256=Vqx9n-6Xo1uNhXR4rThmgWpZXTr0nOtkgDf3oMS9b0g,5855
67
67
  claude_mpm/cli/startup_logging.py,sha256=xtgAmTirhpk2B-dIS9YKcesPprXTukfu24gJSmGt8y8,29357
@@ -398,7 +398,7 @@ claude_mpm/scripts/claude-hook-handler.sh,sha256=xe6dKubrjK1JDO0SJdc1-tA6C7YSb5Y
398
398
  claude_mpm/scripts/launch_monitor.py,sha256=Q7hN4Wurw45veLWPSXk0WfvkKxQ1Snz7TjZsV_pNWQc,2418
399
399
  claude_mpm/scripts/mcp_server.py,sha256=_i9ydtI7AcO-Eb7gzbIDbcJY4PKRQRYNobB8eMailI4,2259
400
400
  claude_mpm/scripts/mcp_wrapper.py,sha256=PvfHJShcsQHGJZD-RN3RnwLOzemAKYZ2kW_QfTkGzkk,1105
401
- claude_mpm/scripts/mpm_doctor.py,sha256=mqvz1ePtrzzaP6S2oG2teJQx5mq3QM4HXgNKmEXVau8,8814
401
+ claude_mpm/scripts/mpm_doctor.py,sha256=98vBiTIB4xpaSgOvTP9N3EU22V2Odxd9DivhQizG0VM,8822
402
402
  claude_mpm/scripts/socketio_daemon.py,sha256=I1n0ny6UZTQWKN-_ZiNKK37jJTRgRESyHDAVvXWK33M,6038
403
403
  claude_mpm/scripts/start_activity_logging.py,sha256=1G9bFYiBSkpxSRXyKht73nL5gH-4zwukLutWWKAipGg,2869
404
404
  claude_mpm/services/__init__.py,sha256=X10comSYoSvoi4jaz9a7ztqcYhCZMX7QmX7nwHGJjCM,7495
@@ -411,7 +411,7 @@ claude_mpm/services/event_aggregator.py,sha256=DDcehIZVpiEDzs9o18gDZyvjMBHCq2H8H
411
411
  claude_mpm/services/exceptions.py,sha256=5lVZETr_6-xk0ItH7BTfYUiX5RlckS1e8ah_UalYG9c,26475
412
412
  claude_mpm/services/hook_installer_service.py,sha256=z3kKeriEY1Y9bFesuGlHBxhCtc0Wzd3Zv02k2_rEyGo,19727
413
413
  claude_mpm/services/hook_service.py,sha256=rZnMn_4qxX5g9KAn0IQdoG50WmySNfsTmfG0XHuRHXk,15737
414
- claude_mpm/services/mcp_config_manager.py,sha256=Rsbk9Ygq7tJWqZI67VnYWSW30_9ptmLjyX7xf-rJcho,50465
414
+ claude_mpm/services/mcp_config_manager.py,sha256=M1wSWEwOYvzoLajAAFtoKQmeQ64lh-zBe5IaFK_XGnw,51143
415
415
  claude_mpm/services/mcp_service_verifier.py,sha256=ngiegCngX18AFehfyJdvqQAvscoIBvFN_DeOoGTjxj0,25164
416
416
  claude_mpm/services/memory_hook_service.py,sha256=pRlTClkRcw30Jhwbha4BC8IMdzKZxF8aWqf52JlntgY,11600
417
417
  claude_mpm/services/monitor_build_service.py,sha256=8gWR9CaqgXdG6-OjOFXGpk28GCcJTlHhojkUYnMCebI,12160
@@ -560,7 +560,7 @@ claude_mpm/services/diagnostics/checks/filesystem_check.py,sha256=V5HoHDYlSuoK2l
560
560
  claude_mpm/services/diagnostics/checks/installation_check.py,sha256=WoTt15R8Wg-6k2JZFAtmffFuih1AIyCX71QOHEFH-Ro,19562
561
561
  claude_mpm/services/diagnostics/checks/instructions_check.py,sha256=VbgBorl0RpFvxKQ_SC1gibTmGSiXaKSp-vVZt6hbH1g,16290
562
562
  claude_mpm/services/diagnostics/checks/mcp_check.py,sha256=SftuhP70abopyMD8GlLA_K3XHEYnBAeITggUQI0cYP4,12173
563
- claude_mpm/services/diagnostics/checks/mcp_services_check.py,sha256=ESE5ITzNjkCWWKMQdQoTBDLK8pZQ9MJY4x-E_nVuRww,42278
563
+ claude_mpm/services/diagnostics/checks/mcp_services_check.py,sha256=HYXVGJchYsQ__7S757bXjjLklXODHL4yfrIV257D6A4,42760
564
564
  claude_mpm/services/diagnostics/checks/monitor_check.py,sha256=NUx5G1yjHWlukZmwhUz4o8STRWgsQEx01YjIMReNC0A,10096
565
565
  claude_mpm/services/diagnostics/checks/startup_log_check.py,sha256=DrXdml2rHvmhFBdb_sntE3xmwaP_DZIKjdVbCn8Dy7E,12258
566
566
  claude_mpm/services/event_bus/__init__.py,sha256=ETCo4a6puIeyVWAv55uCDjjhzNyUwbVAHEcAVkVapx8,688
@@ -773,9 +773,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
773
773
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
774
774
  claude_mpm/validation/agent_validator.py,sha256=Nm2WmcbCb0EwOG4nFcikc3wVdiiAfjGBBI3YoR6ainQ,20915
775
775
  claude_mpm/validation/frontmatter_validator.py,sha256=IDBOCBweO6umydSnUJjBh81sKk3cy9hRFYm61DCiXbI,7020
776
- claude_mpm-4.4.10.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
777
- claude_mpm-4.4.10.dist-info/METADATA,sha256=EGjmTO4JDo5-FyY74u-4_MlaoF9oNpWZ8MjMnvfym0k,17518
778
- claude_mpm-4.4.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
779
- claude_mpm-4.4.10.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
780
- claude_mpm-4.4.10.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
781
- claude_mpm-4.4.10.dist-info/RECORD,,
776
+ claude_mpm-4.4.12.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
777
+ claude_mpm-4.4.12.dist-info/METADATA,sha256=d6CUgpr-Rb2uuk4UkukX91y23VYDRXiX2TPeQt3k5cU,17518
778
+ claude_mpm-4.4.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
779
+ claude_mpm-4.4.12.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
780
+ claude_mpm-4.4.12.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
781
+ claude_mpm-4.4.12.dist-info/RECORD,,
@@ -1,5 +1,6 @@
1
1
  [console_scripts]
2
2
  claude-mpm = claude_mpm.cli:main
3
+ claude-mpm-doctor = claude_mpm.scripts.mpm_doctor:main
3
4
  claude-mpm-mcp = claude_mpm.services.mcp_gateway.server.stdio_server:main_sync
4
5
  claude-mpm-mcp-wrapper = claude_mpm.scripts.mcp_wrapper:entry_point
5
6
  claude-mpm-monitor = claude_mpm.scripts.launch_monitor:main