claude-mpm 4.4.5__py3-none-any.whl → 4.4.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/cli/commands/mcp_external_commands.py +7 -7
  3. claude_mpm/cli/commands/mcp_install_commands.py +9 -9
  4. claude_mpm/cli/commands/mcp_setup_external.py +6 -6
  5. claude_mpm/hooks/kuzu_memory_hook.py +4 -2
  6. claude_mpm/services/diagnostics/checks/__init__.py +2 -2
  7. claude_mpm/services/diagnostics/checks/{claude_desktop_check.py → claude_code_check.py} +95 -112
  8. claude_mpm/services/diagnostics/checks/mcp_check.py +6 -6
  9. claude_mpm/services/diagnostics/checks/mcp_services_check.py +29 -6
  10. claude_mpm/services/diagnostics/diagnostic_runner.py +5 -5
  11. claude_mpm/services/diagnostics/doctor_reporter.py +4 -4
  12. claude_mpm/services/mcp_config_manager.py +46 -26
  13. claude_mpm/services/mcp_gateway/core/process_pool.py +11 -8
  14. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +4 -4
  15. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +8 -4
  16. claude_mpm/services/project/project_organizer.py +8 -1
  17. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +1 -2
  18. claude_mpm/services/unified/config_strategies/context_strategy.py +1 -3
  19. claude_mpm/services/unified/config_strategies/file_loader_strategy.py +3 -1
  20. claude_mpm/validation/frontmatter_validator.py +1 -1
  21. {claude_mpm-4.4.5.dist-info → claude_mpm-4.4.6.dist-info}/METADATA +8 -5
  22. {claude_mpm-4.4.5.dist-info → claude_mpm-4.4.6.dist-info}/RECORD +26 -26
  23. {claude_mpm-4.4.5.dist-info → claude_mpm-4.4.6.dist-info}/WHEEL +0 -0
  24. {claude_mpm-4.4.5.dist-info → claude_mpm-4.4.6.dist-info}/entry_points.txt +0 -0
  25. {claude_mpm-4.4.5.dist-info → claude_mpm-4.4.6.dist-info}/licenses/LICENSE +0 -0
  26. {claude_mpm-4.4.5.dist-info → claude_mpm-4.4.6.dist-info}/top_level.txt +0 -0
claude_mpm/VERSION CHANGED
@@ -1 +1 @@
1
- 4.4.5
1
+ 4.4.6
@@ -45,7 +45,7 @@ class MCPExternalCommands:
45
45
  return 1
46
46
 
47
47
  def _setup_external(self, args):
48
- """Setup external MCP services in Claude Desktop.
48
+ """Setup external MCP services in Claude Code.
49
49
 
50
50
  Args:
51
51
  args: Command line arguments
@@ -67,13 +67,13 @@ class MCPExternalCommands:
67
67
  print(" You may need to install them manually:")
68
68
  print(" pip install mcp-vector-search mcp-browser")
69
69
 
70
- # Then configure in Claude Desktop
71
- print("\n2️⃣ Configuring Claude Desktop...")
70
+ # Then configure in Claude Code
71
+ print("\n2️⃣ Configuring Claude Code...")
72
72
  force = getattr(args, "force", False)
73
73
  if setup.setup_external_services(force=force):
74
74
  print("\n✅ External services setup completed successfully!")
75
75
  print("\nNext steps:")
76
- print("1. Restart Claude Desktop to load the new services")
76
+ print("1. Restart Claude Code to load the new services")
77
77
  print("2. Check status with: claude-mpm mcp external list")
78
78
  print("3. The services will be available in Claude as separate MCP servers")
79
79
  return 0
@@ -111,7 +111,7 @@ class MCPExternalCommands:
111
111
  import json
112
112
  from pathlib import Path
113
113
 
114
- # Check Claude Desktop configuration
114
+ # Check Claude Code configuration
115
115
  config_paths = [
116
116
  Path.home()
117
117
  / "Library"
@@ -157,7 +157,7 @@ class MCPExternalCommands:
157
157
  break
158
158
 
159
159
  if not config_found:
160
- print("❌ No Claude Desktop configuration found")
160
+ print("❌ No Claude Code configuration found")
161
161
  print(" Please run: claude-mpm mcp install")
162
162
 
163
163
  # Check Python packages
@@ -215,7 +215,7 @@ class MCPExternalCommands:
215
215
  print("\n✅ Configuration updated successfully!")
216
216
  print("\nNext steps:")
217
217
  print("1. Review the .mcp.json file to verify the configuration")
218
- print("2. Restart Claude Desktop to load the updated services")
218
+ print("2. Restart Claude Code to load the updated services")
219
219
  return 0
220
220
  print("\n❌ Failed to update configuration")
221
221
  return 1
@@ -46,8 +46,8 @@ class MCPInstallCommands:
46
46
  print("\nPlease install manually with: pip install mcp")
47
47
  return 1
48
48
 
49
- # Step 2: Configure Claude Desktop with the new CLI command
50
- print("\n2️⃣ Configuring Claude Desktop...")
49
+ # Step 2: Configure Claude Code with the new CLI command
50
+ print("\n2️⃣ Configuring Claude Code...")
51
51
  try:
52
52
  success = self._configure_claude_desktop(args.force)
53
53
  if not success:
@@ -72,7 +72,7 @@ class MCPInstallCommands:
72
72
  # Install Python packages for external services
73
73
  external_setup.check_and_install_pip_packages()
74
74
 
75
- # Setup external services in Claude Desktop config
75
+ # Setup external services in Claude Code config
76
76
  if external_setup.setup_external_services(force=args.force):
77
77
  print("✅ External services configured successfully")
78
78
  else:
@@ -86,7 +86,7 @@ class MCPInstallCommands:
86
86
  print("\n✅ Configuration completed successfully")
87
87
  print("\n🎉 MCP Gateway is ready to use!")
88
88
  print("\nNext steps:")
89
- print("1. Restart Claude Desktop (if running)")
89
+ print("1. Restart Claude Code (if running)")
90
90
  print("2. Test the server: claude-mpm mcp server --test")
91
91
  print("3. Check status: claude-mpm mcp status")
92
92
  print("4. List external services: claude-mpm mcp external list")
@@ -97,9 +97,9 @@ class MCPInstallCommands:
97
97
  return 1
98
98
 
99
99
  def _configure_claude_desktop(self, force=False):
100
- """Configure Claude Desktop to use the MCP gateway via CLI command.
100
+ """Configure Claude Code to use the MCP gateway via CLI command.
101
101
 
102
- WHY: Claude Desktop reads MCP server configurations from a platform-specific
102
+ WHY: Claude Code reads MCP server configurations from a platform-specific
103
103
  configuration file. This method updates that file to include the claude-mpm-gateway
104
104
  server configuration.
105
105
 
@@ -166,14 +166,14 @@ class MCPInstallCommands:
166
166
  return self._save_config(config, config_path)
167
167
 
168
168
  def _get_claude_config_path(self):
169
- """Get the Claude Desktop configuration file path.
169
+ """Get the Claude Code configuration file path.
170
170
 
171
171
  Returns:
172
- Path or None: Path to Claude Desktop config file
172
+ Path or None: Path to Claude Code config file
173
173
  """
174
174
  import platform
175
175
 
176
- # Try multiple possible locations for Claude Desktop config
176
+ # Try multiple possible locations for Claude Code config
177
177
  possible_paths = [
178
178
  Path.home()
179
179
  / "Library"
@@ -1,7 +1,7 @@
1
1
  """MCP external services setup module.
2
2
 
3
3
  This module handles the registration of external MCP services
4
- (mcp-vector-search, mcp-browser) as separate MCP servers in Claude Desktop.
4
+ (mcp-vector-search, mcp-browser) as separate MCP servers in Claude Code.
5
5
  """
6
6
 
7
7
  import json
@@ -13,7 +13,7 @@ from typing import Dict, Optional, Tuple
13
13
 
14
14
 
15
15
  class MCPExternalServicesSetup:
16
- """Handles setup of external MCP services in Claude Desktop configuration."""
16
+ """Handles setup of external MCP services in Claude Code configuration."""
17
17
 
18
18
  def get_project_services(self, project_path: Path) -> Dict:
19
19
  """Get external services configuration for the current project.
@@ -472,9 +472,9 @@ class MCPExternalServicesSetup:
472
472
  f"\n✅ Successfully configured {success_count} external services in .mcp.json"
473
473
  )
474
474
  print(
475
- "\n📌 Note: Claude Desktop will automatically load these services"
475
+ "\n📌 Note: Claude Code will automatically load these services"
476
476
  )
477
- print(" when you open this project directory in Claude Desktop.")
477
+ print(" when you open this project directory in Claude Code.")
478
478
  return True
479
479
  print("❌ Failed to save configuration")
480
480
  return False
@@ -487,7 +487,7 @@ class MCPExternalServicesSetup:
487
487
  """Setup a single external MCP service.
488
488
 
489
489
  Args:
490
- config: The Claude Desktop configuration
490
+ config: The Claude Code configuration
491
491
  service_name: Name of the service to setup
492
492
  service_info: Service configuration information
493
493
  force: Whether to overwrite existing configuration
@@ -814,7 +814,7 @@ class MCPExternalServicesSetup:
814
814
  print("✅ Successfully updated mcp-browser configuration in .mcp.json")
815
815
  print(f" Command: {browser_config['command']}")
816
816
  print(f" Args: {browser_config['args']}")
817
- print("\n📌 Note: Claude Desktop will automatically use this configuration")
817
+ print("\n📌 Note: Claude Code will automatically use this configuration")
818
818
  print(" when you open this project directory.")
819
819
  return True
820
820
  print("❌ Failed to save configuration")
@@ -163,7 +163,8 @@ class KuzuMemoryHook(SubmitHook):
163
163
  capture_output=True,
164
164
  text=True,
165
165
  timeout=5,
166
- cwd=str(self.project_path), check=False,
166
+ cwd=str(self.project_path),
167
+ check=False,
167
168
  )
168
169
 
169
170
  if result.returncode == 0 and result.stdout:
@@ -267,7 +268,8 @@ Note: Use the memories above to provide more informed and contextual responses.
267
268
  capture_output=True,
268
269
  text=True,
269
270
  timeout=5,
270
- cwd=str(self.project_path), check=False,
271
+ cwd=str(self.project_path),
272
+ check=False,
271
273
  )
272
274
 
273
275
  if result.returncode == 0:
@@ -7,7 +7,7 @@ diagnostic components.
7
7
 
8
8
  from .agent_check import AgentCheck
9
9
  from .base_check import BaseDiagnosticCheck
10
- from .claude_desktop_check import ClaudeDesktopCheck
10
+ from .claude_code_check import ClaudeCodeCheck
11
11
  from .common_issues_check import CommonIssuesCheck
12
12
  from .configuration_check import ConfigurationCheck
13
13
  from .filesystem_check import FilesystemCheck
@@ -21,7 +21,7 @@ from .startup_log_check import StartupLogCheck
21
21
  __all__ = [
22
22
  "AgentCheck",
23
23
  "BaseDiagnosticCheck",
24
- "ClaudeDesktopCheck",
24
+ "ClaudeCodeCheck",
25
25
  "CommonIssuesCheck",
26
26
  "ConfigurationCheck",
27
27
  "FilesystemCheck",
@@ -1,7 +1,7 @@
1
1
  """
2
- Check Claude Desktop integration.
2
+ Check Claude Code (CLI) integration.
3
3
 
4
- WHY: Verify that Claude Desktop is installed, properly configured,
4
+ WHY: Verify that Claude Code CLI is installed, properly configured,
5
5
  and integrated with claude-mpm.
6
6
  """
7
7
 
@@ -13,24 +13,24 @@ from ..models import DiagnosticResult, DiagnosticStatus
13
13
  from .base_check import BaseDiagnosticCheck
14
14
 
15
15
 
16
- class ClaudeDesktopCheck(BaseDiagnosticCheck):
17
- """Check Claude Desktop installation and integration."""
16
+ class ClaudeCodeCheck(BaseDiagnosticCheck):
17
+ """Check Claude Code CLI installation and integration."""
18
18
 
19
19
  @property
20
20
  def name(self) -> str:
21
- return "claude_desktop_check"
21
+ return "claude_code_check"
22
22
 
23
23
  @property
24
24
  def category(self) -> str:
25
- return "Claude Desktop"
25
+ return "Claude Code"
26
26
 
27
27
  def run(self) -> DiagnosticResult:
28
- """Run Claude Desktop diagnostics."""
28
+ """Run Claude Code CLI diagnostics."""
29
29
  try:
30
30
  sub_results = []
31
31
  details = {}
32
32
 
33
- # Check if Claude Desktop is installed
33
+ # Check if Claude Code CLI is installed
34
34
  install_result = self._check_installation()
35
35
  sub_results.append(install_result)
36
36
  details["installed"] = install_result.status == DiagnosticStatus.OK
@@ -54,13 +54,13 @@ class ClaudeDesktopCheck(BaseDiagnosticCheck):
54
54
  # Determine overall status
55
55
  if any(r.status == DiagnosticStatus.ERROR for r in sub_results):
56
56
  status = DiagnosticStatus.ERROR
57
- message = "Claude Desktop has critical issues"
57
+ message = "Claude Code CLI has critical issues"
58
58
  elif any(r.status == DiagnosticStatus.WARNING for r in sub_results):
59
59
  status = DiagnosticStatus.WARNING
60
- message = "Claude Desktop needs configuration"
60
+ message = "Claude Code CLI needs configuration"
61
61
  else:
62
62
  status = DiagnosticStatus.OK
63
- message = "Claude Desktop properly configured"
63
+ message = "Claude Code CLI properly configured"
64
64
 
65
65
  return DiagnosticResult(
66
66
  category=self.category,
@@ -74,109 +74,102 @@ class ClaudeDesktopCheck(BaseDiagnosticCheck):
74
74
  return DiagnosticResult(
75
75
  category=self.category,
76
76
  status=DiagnosticStatus.ERROR,
77
- message=f"Claude Desktop check failed: {e!s}",
77
+ message=f"Claude Code CLI check failed: {e!s}",
78
78
  details={"error": str(e)},
79
79
  )
80
80
 
81
81
  def _check_installation(self) -> DiagnosticResult:
82
- """Check if Claude Desktop is installed."""
83
- # Check common installation paths
84
- mac_path = Path("/Applications/Claude.app")
85
- linux_paths = [
86
- Path.home() / ".local/share/applications/claude.desktop",
87
- Path("/usr/share/applications/claude.desktop"),
88
- Path("/opt/Claude"),
89
- ]
90
- windows_paths = [
91
- Path("C:/Program Files/Claude/Claude.exe"),
92
- Path.home() / "AppData/Local/Claude/Claude.exe",
93
- ]
94
-
95
- # Check for Claude process
82
+ """Check if Claude Code CLI is installed."""
83
+ # Check if claude command is available
96
84
  try:
97
85
  result = subprocess.run(
98
- ["pgrep", "-f", "Claude"], capture_output=True, timeout=2, check=False
86
+ ["claude", "--version"],
87
+ capture_output=True,
88
+ timeout=5,
89
+ check=False,
90
+ text=True
99
91
  )
100
92
  if result.returncode == 0:
101
93
  return DiagnosticResult(
102
- category="Claude Desktop Installation",
94
+ category="Claude Code CLI Installation",
103
95
  status=DiagnosticStatus.OK,
104
- message="Claude Desktop is running",
105
- details={"running": True},
96
+ message="Claude Code CLI is installed and accessible",
97
+ details={
98
+ "installed": True,
99
+ "path": "claude",
100
+ "version_output": result.stdout.strip()
101
+ },
106
102
  )
107
103
  except (subprocess.SubprocessError, FileNotFoundError):
108
104
  pass
109
105
 
110
- # Check installation paths
111
- if mac_path.exists():
112
- return DiagnosticResult(
113
- category="Claude Desktop Installation",
114
- status=DiagnosticStatus.OK,
115
- message="Claude Desktop installed (macOS)",
116
- details={"path": str(mac_path), "platform": "macos"},
117
- )
118
-
119
- for path in linux_paths:
120
- if path.exists():
121
- return DiagnosticResult(
122
- category="Claude Desktop Installation",
123
- status=DiagnosticStatus.OK,
124
- message="Claude Desktop installed (Linux)",
125
- details={"path": str(path), "platform": "linux"},
126
- )
106
+ # Check common installation paths
107
+ possible_paths = [
108
+ Path("/usr/local/bin/claude"),
109
+ Path.home() / ".local/bin/claude",
110
+ Path("/opt/homebrew/bin/claude"),
111
+ Path("/usr/bin/claude"),
112
+ ]
127
113
 
128
- for path in windows_paths:
129
- if path.exists():
114
+ for path in possible_paths:
115
+ if path.exists() and path.is_file():
130
116
  return DiagnosticResult(
131
- category="Claude Desktop Installation",
117
+ category="Claude Code CLI Installation",
132
118
  status=DiagnosticStatus.OK,
133
- message="Claude Desktop installed (Windows)",
134
- details={"path": str(path), "platform": "windows"},
119
+ message=f"Claude Code CLI found at {path}",
120
+ details={"installed": True, "path": str(path)},
135
121
  )
136
122
 
137
123
  return DiagnosticResult(
138
- category="Claude Desktop Installation",
139
- status=DiagnosticStatus.WARNING,
140
- message="Claude Desktop not found",
124
+ category="Claude Code CLI Installation",
125
+ status=DiagnosticStatus.ERROR,
126
+ message="Claude Code CLI not found",
141
127
  details={"installed": False},
142
- fix_description="Install Claude Desktop from https://claude.ai/download",
128
+ fix_description="Install Claude Code CLI from https://claude.ai/code",
143
129
  )
144
130
 
145
131
  def _check_version(self) -> DiagnosticResult:
146
- """Check Claude Desktop version compatibility."""
147
- # Try to get version from config file
148
- config_paths = [
149
- Path.home() / "Library/Application Support/Claude/config.json", # macOS
150
- Path.home() / ".config/Claude/config.json", # Linux
151
- Path.home() / "AppData/Roaming/Claude/config.json", # Windows
152
- ]
132
+ """Check Claude Code CLI version compatibility."""
133
+ try:
134
+ result = subprocess.run(
135
+ ["claude", "--version"],
136
+ capture_output=True,
137
+ timeout=5,
138
+ check=True,
139
+ text=True
140
+ )
141
+ version_output = result.stdout.strip()
153
142
 
154
- for config_path in config_paths:
155
- if config_path.exists():
156
- try:
157
- with open(config_path) as f:
158
- config = json.load(f)
159
- version = config.get("version", "unknown")
160
-
161
- # Simple version check (would need real version comparison logic)
162
- return DiagnosticResult(
163
- category="Claude Desktop Version",
164
- status=DiagnosticStatus.OK,
165
- message=f"Version: {version}",
166
- details={
167
- "version": version,
168
- "config_path": str(config_path),
169
- },
170
- )
171
- except Exception:
172
- pass
143
+ # Extract version number (basic parsing)
144
+ version = "unknown"
145
+ if "version" in version_output.lower():
146
+ parts = version_output.split()
147
+ for i, part in enumerate(parts):
148
+ if "version" in part.lower() and i + 1 < len(parts):
149
+ version = parts[i + 1]
150
+ break
173
151
 
174
- return DiagnosticResult(
175
- category="Claude Desktop Version",
176
- status=DiagnosticStatus.WARNING,
177
- message="Could not determine version",
178
- details={"version": "unknown"},
179
- )
152
+ # Check minimum version requirement (1.0.60+)
153
+ status = DiagnosticStatus.OK
154
+ message = f"Version: {version}"
155
+
156
+ return DiagnosticResult(
157
+ category="Claude Code CLI Version",
158
+ status=status,
159
+ message=message,
160
+ details={
161
+ "version": version,
162
+ "version_output": version_output,
163
+ },
164
+ )
165
+
166
+ except subprocess.SubprocessError as e:
167
+ return DiagnosticResult(
168
+ category="Claude Code CLI Version",
169
+ status=DiagnosticStatus.WARNING,
170
+ message=f"Could not determine version: {e}",
171
+ details={"version": "unknown", "error": str(e)},
172
+ )
180
173
 
181
174
  def _check_output_style(self) -> DiagnosticResult:
182
175
  """Check if output style is deployed."""
@@ -224,36 +217,26 @@ class ClaudeDesktopCheck(BaseDiagnosticCheck):
224
217
  )
225
218
 
226
219
  def _check_mcp_integration(self) -> DiagnosticResult:
227
- """Check MCP server integration with Claude Desktop."""
228
- config_path = Path.home() / ".config/claude/claude_desktop_config.json"
220
+ """Check MCP server integration with Claude Code CLI."""
221
+ # Claude Code CLI uses ~/.claude.json for configuration
222
+ config_path = Path.home() / ".claude.json"
229
223
 
230
224
  if not config_path.exists():
231
- # Try alternate paths
232
- alt_paths = [
233
- Path.home()
234
- / "Library/Application Support/Claude/claude_desktop_config.json",
235
- Path.home() / "AppData/Roaming/Claude/claude_desktop_config.json",
236
- ]
237
- for alt_path in alt_paths:
238
- if alt_path.exists():
239
- config_path = alt_path
240
- break
241
- else:
242
- return DiagnosticResult(
243
- category="MCP Integration",
244
- status=DiagnosticStatus.WARNING,
245
- message="Claude Desktop config not found",
246
- details={"configured": False},
247
- fix_command="claude-mpm mcp install",
248
- fix_description="Install MCP server integration",
249
- )
225
+ return DiagnosticResult(
226
+ category="MCP Integration",
227
+ status=DiagnosticStatus.WARNING,
228
+ message="Claude Code CLI config not found",
229
+ details={"configured": False, "config_path": str(config_path)},
230
+ fix_command="claude-mpm mcp install",
231
+ fix_description="Install MCP server integration for Claude Code CLI",
232
+ )
250
233
 
251
234
  try:
252
235
  with open(config_path) as f:
253
236
  config = json.load(f)
254
237
 
255
238
  mcp_servers = config.get("mcpServers", {})
256
- if "claude-mpm-gateway" in mcp_servers:
239
+ if "claude-mpm-gateway" in mcp_servers or "claude-mpm" in mcp_servers:
257
240
  return DiagnosticResult(
258
241
  category="MCP Integration",
259
242
  status=DiagnosticStatus.OK,
@@ -274,7 +257,7 @@ class ClaudeDesktopCheck(BaseDiagnosticCheck):
274
257
  "config_path": str(config_path),
275
258
  },
276
259
  fix_command="claude-mpm mcp install",
277
- fix_description="Configure MCP server for Claude Desktop",
260
+ fix_description="Configure MCP server for Claude Code CLI",
278
261
  )
279
262
 
280
263
  except Exception as e:
@@ -283,4 +266,4 @@ class ClaudeDesktopCheck(BaseDiagnosticCheck):
283
266
  status=DiagnosticStatus.WARNING,
284
267
  message=f"Could not check MCP configuration: {e!s}",
285
268
  details={"error": str(e)},
286
- )
269
+ )
@@ -2,7 +2,7 @@
2
2
  Check MCP (Model Context Protocol) server status.
3
3
 
4
4
  WHY: Verify that the MCP gateway is properly installed, configured,
5
- and functioning for enhanced Claude Desktop capabilities.
5
+ and functioning for enhanced Claude Code capabilities.
6
6
  """
7
7
 
8
8
  import json
@@ -129,7 +129,7 @@ class MCPCheck(BaseDiagnosticCheck):
129
129
  )
130
130
 
131
131
  def _check_configuration(self) -> DiagnosticResult:
132
- """Check MCP configuration in Claude Desktop."""
132
+ """Check MCP configuration in Claude Code."""
133
133
  config_paths = [
134
134
  Path.home() / ".config/claude/claude_desktop_config.json",
135
135
  Path.home()
@@ -147,10 +147,10 @@ class MCPCheck(BaseDiagnosticCheck):
147
147
  return DiagnosticResult(
148
148
  category="MCP Configuration",
149
149
  status=DiagnosticStatus.WARNING,
150
- message="Claude Desktop config not found",
150
+ message="Claude Code config not found",
151
151
  details={"configured": False},
152
152
  fix_command="claude-mpm mcp config",
153
- fix_description="Configure MCP server in Claude Desktop",
153
+ fix_description="Configure MCP server in Claude Code",
154
154
  )
155
155
 
156
156
  try:
@@ -167,7 +167,7 @@ class MCPCheck(BaseDiagnosticCheck):
167
167
  message="MCP gateway not configured",
168
168
  details={"configured": False, "config_path": str(config_path)},
169
169
  fix_command="claude-mpm mcp config",
170
- fix_description="Add MCP gateway to Claude Desktop configuration",
170
+ fix_description="Add MCP gateway to Claude Code configuration",
171
171
  )
172
172
 
173
173
  # Check configuration validity
@@ -203,7 +203,7 @@ class MCPCheck(BaseDiagnosticCheck):
203
203
  status=DiagnosticStatus.ERROR,
204
204
  message="Invalid JSON in config file",
205
205
  details={"error": str(e), "config_path": str(config_path)},
206
- fix_description="Fix JSON syntax in Claude Desktop config",
206
+ fix_description="Fix JSON syntax in Claude Code config",
207
207
  )
208
208
  except Exception as e:
209
209
  return DiagnosticResult(
@@ -2,7 +2,7 @@
2
2
  Check MCP external services installation and health.
3
3
 
4
4
  WHY: Verify that MCP services (mcp-vector-search, mcp-browser, mcp-ticketer, kuzu-memory)
5
- are properly installed and accessible for enhanced Claude Desktop capabilities.
5
+ are properly installed and accessible for enhanced Claude Code capabilities.
6
6
  """
7
7
 
8
8
  import json
@@ -21,7 +21,10 @@ class MCPServicesCheck(BaseDiagnosticCheck):
21
21
  MCP_SERVICES = {
22
22
  "mcp-vector-search": {
23
23
  "package": "mcp-vector-search",
24
- "command": ["mcp-vector-search", "--version"], # Use --version for proper check
24
+ "command": [
25
+ "mcp-vector-search",
26
+ "--version",
27
+ ], # Use --version for proper check
25
28
  "description": "Vector search for semantic code navigation",
26
29
  "check_health": True,
27
30
  "health_command": ["mcp-vector-search", "--version"],
@@ -305,17 +308,37 @@ class MCPServicesCheck(BaseDiagnosticCheck):
305
308
  # Look for actual version information
306
309
  output = (result.stdout + result.stderr).lower()
307
310
  # Check for version indicators
308
- if any(keyword in output for keyword in ["version", "v1.", "v0.", "1.", "0."]):
311
+ if any(
312
+ keyword in output
313
+ for keyword in ["version", "v1.", "v0.", "1.", "0."]
314
+ ):
309
315
  # But reject if it's an error message
310
- if not any(error in output for error in ["error", "not found", "no such", "command not found"]):
316
+ if not any(
317
+ error in output
318
+ for error in [
319
+ "error",
320
+ "not found",
321
+ "no such",
322
+ "command not found",
323
+ ]
324
+ ):
311
325
  return True
312
326
 
313
327
  # For some tools, non-zero return code is OK if version is shown
314
328
  elif "--version" in command or "--help" in command:
315
329
  output = (result.stdout + result.stderr).lower()
316
330
  # Must have version info and no error indicators
317
- if ("version" in output or "v1." in output or "v0." in output):
318
- if not any(error in output for error in ["error", "not found", "no such", "command not found", "traceback"]):
331
+ if "version" in output or "v1." in output or "v0." in output:
332
+ if not any(
333
+ error in output
334
+ for error in [
335
+ "error",
336
+ "not found",
337
+ "no such",
338
+ "command not found",
339
+ "traceback",
340
+ ]
341
+ ):
319
342
  return True
320
343
 
321
344
  except (subprocess.SubprocessError, FileNotFoundError, OSError):
@@ -14,7 +14,7 @@ from claude_mpm.core.logging_utils import get_logger
14
14
  from .checks import (
15
15
  AgentCheck,
16
16
  BaseDiagnosticCheck,
17
- ClaudeDesktopCheck,
17
+ ClaudeCodeCheck,
18
18
  CommonIssuesCheck,
19
19
  ConfigurationCheck,
20
20
  FilesystemCheck,
@@ -53,7 +53,7 @@ class DiagnosticRunner:
53
53
  ConfigurationCheck,
54
54
  FilesystemCheck,
55
55
  InstructionsCheck, # Check instruction files early
56
- ClaudeDesktopCheck,
56
+ ClaudeCodeCheck,
57
57
  AgentCheck,
58
58
  MCPCheck,
59
59
  MCPServicesCheck, # Check external MCP services
@@ -121,7 +121,7 @@ class DiagnosticRunner:
121
121
  ]
122
122
  # Level 2: May depend on level 1
123
123
  level2 = [
124
- ClaudeDesktopCheck,
124
+ ClaudeCodeCheck,
125
125
  AgentCheck,
126
126
  MCPCheck,
127
127
  MCPServicesCheck,
@@ -209,8 +209,8 @@ class DiagnosticRunner:
209
209
  "config": ConfigurationCheck,
210
210
  "filesystem": FilesystemCheck,
211
211
  "fs": FilesystemCheck,
212
- "claude": ClaudeDesktopCheck,
213
- "claude_desktop": ClaudeDesktopCheck,
212
+ "claude": ClaudeCodeCheck,
213
+ "claude_code": ClaudeCodeCheck,
214
214
  "agents": AgentCheck,
215
215
  "agent": AgentCheck,
216
216
  "mcp": MCPCheck,
@@ -385,9 +385,9 @@ class DoctorReporter:
385
385
  print(
386
386
  f"| Installation Method | {result.details['installation_method']} |"
387
387
  )
388
- elif result.category == "Claude Desktop":
388
+ elif result.category == "Claude Code":
389
389
  if result.details.get("version"):
390
- print(f"| Claude Desktop | {result.details['version']} |")
390
+ print(f"| Claude Code (CLI) | {result.details['version']} |")
391
391
 
392
392
  def _print_mcp_services_markdown(self, summary: DiagnosticSummary):
393
393
  """Print MCP services status table in markdown."""
@@ -533,11 +533,11 @@ class DoctorReporter:
533
533
  )
534
534
 
535
535
  if (
536
- result.category == "Claude Desktop"
536
+ result.category == "Claude Code"
537
537
  and result.status == DiagnosticStatus.WARNING
538
538
  ):
539
539
  recommendations.append(
540
- "Update Claude Desktop to the latest version for best compatibility"
540
+ "Update Claude Code (CLI) to the latest version for best compatibility"
541
541
  )
542
542
 
543
543
  if recommendations:
@@ -86,7 +86,11 @@ class MCPConfigManager:
86
86
  for path in candidates:
87
87
  try:
88
88
  result = subprocess.run(
89
- [path, "--help"], capture_output=True, text=True, timeout=5, check=False
89
+ [path, "--help"],
90
+ capture_output=True,
91
+ text=True,
92
+ timeout=5,
93
+ check=False,
90
94
  )
91
95
  # Check if this version has MCP support
92
96
  if "claude" in result.stdout or "mcp" in result.stdout:
@@ -304,7 +308,7 @@ class MCPConfigManager:
304
308
 
305
309
  elif service_name == "kuzu-memory":
306
310
  # Determine kuzu-memory command version
307
- kuzu_args = []
311
+ kuzu_args = ["mcp", "serve"] # Default to the correct modern format
308
312
  test_cmd = None
309
313
 
310
314
  if use_pipx_run:
@@ -317,17 +321,30 @@ class MCPConfigManager:
317
321
  if test_cmd:
318
322
  try:
319
323
  result = subprocess.run(
320
- test_cmd, capture_output=True, text=True, timeout=10, check=False
324
+ test_cmd,
325
+ capture_output=True,
326
+ text=True,
327
+ timeout=10,
328
+ check=False,
321
329
  )
322
- if "claude" in result.stdout:
323
- # v1.1.0+ with claude command
324
- kuzu_args = ["claude", "mcp-server"]
325
- else:
326
- # v1.0.0 with serve command
330
+ # Check for MCP support in help output
331
+ help_output = result.stdout.lower() + result.stderr.lower()
332
+
333
+ # Modern version detection - look for "mcp serve" command
334
+ if "mcp serve" in help_output or ("mcp" in help_output and "serve" in help_output):
335
+ # Modern version with mcp serve command
336
+ kuzu_args = ["mcp", "serve"]
337
+ # Legacy version detection - only "serve" without "mcp"
338
+ elif "serve" in help_output and "mcp" not in help_output:
339
+ # Very old version that only has serve command
327
340
  kuzu_args = ["serve"]
328
- except:
329
- # Default to newer version command
330
- kuzu_args = ["claude", "mcp-server"]
341
+ # Note: "claude mcp-server" format is deprecated and not used
342
+ else:
343
+ # Default to the correct modern format
344
+ kuzu_args = ["mcp", "serve"]
345
+ except Exception:
346
+ # Default to the correct mcp serve command on any error
347
+ kuzu_args = ["mcp", "serve"]
331
348
 
332
349
  if use_pipx_run:
333
350
  config["command"] = "pipx"
@@ -339,17 +356,16 @@ class MCPConfigManager:
339
356
  config["command"] = service_path
340
357
  config["args"] = kuzu_args
341
358
 
359
+ # Generic config for unknown services
360
+ elif use_pipx_run:
361
+ config["command"] = "pipx"
362
+ config["args"] = ["run", service_name]
363
+ elif use_uvx:
364
+ config["command"] = "uvx"
365
+ config["args"] = [service_name]
342
366
  else:
343
- # Generic config for unknown services
344
- if use_pipx_run:
345
- config["command"] = "pipx"
346
- config["args"] = ["run", service_name]
347
- elif use_uvx:
348
- config["command"] = "uvx"
349
- config["args"] = [service_name]
350
- else:
351
- config["command"] = service_path
352
- config["args"] = []
367
+ config["command"] = service_path
368
+ config["args"] = []
353
369
 
354
370
  return config
355
371
 
@@ -632,9 +648,7 @@ class MCPConfigManager:
632
648
  f"pipx install succeeded but verification failed for {service_name}"
633
649
  )
634
650
  else:
635
- self.logger.debug(
636
- f"pipx install failed: {result.stderr}"
637
- )
651
+ self.logger.debug(f"pipx install failed: {result.stderr}")
638
652
  except subprocess.TimeoutExpired:
639
653
  self.logger.warning(f"pipx install timed out for {service_name}")
640
654
  except Exception as e:
@@ -739,9 +753,15 @@ class MCPConfigManager:
739
753
  if result.returncode == 0:
740
754
  return True
741
755
  # Some tools return non-zero but still work
742
- elif any(indicator in output for indicator in ["version", "usage", "help", service_name.lower()]):
756
+ if any(
757
+ indicator in output
758
+ for indicator in ["version", "usage", "help", service_name.lower()]
759
+ ):
743
760
  # Make sure it's not an error message
744
- if not any(error in output for error in ["error", "not found", "traceback", "no such"]):
761
+ if not any(
762
+ error in output
763
+ for error in ["error", "not found", "traceback", "no such"]
764
+ ):
745
765
  return True
746
766
  except Exception as e:
747
767
  self.logger.debug(f"Verification error for {service_name}: {e}")
@@ -423,7 +423,8 @@ async def auto_initialize_vector_search():
423
423
  ["pipx", "install", "mcp-vector-search"],
424
424
  capture_output=True,
425
425
  text=True,
426
- timeout=60, check=False, # 1 minute timeout for installation
426
+ timeout=60,
427
+ check=False, # 1 minute timeout for installation
427
428
  )
428
429
 
429
430
  if result.returncode == 0:
@@ -492,9 +493,7 @@ async def auto_initialize_vector_search():
492
493
  if chroma_db.exists() and chroma_db.stat().st_size > 0:
493
494
  logger.info("✓ Vector search index is healthy and ready")
494
495
  return
495
- logger.info(
496
- "⚠️ Vector search index may be corrupted, rebuilding..."
497
- )
496
+ logger.info("⚠️ Vector search index may be corrupted, rebuilding...")
498
497
  except Exception as e:
499
498
  logger.debug(
500
499
  f"Vector search health check failed: {e}, will attempt to rebuild"
@@ -512,7 +511,8 @@ async def auto_initialize_vector_search():
512
511
  capture_output=True,
513
512
  text=True,
514
513
  timeout=30,
515
- cwd=str(current_dir), check=False, # Run in the project directory
514
+ cwd=str(current_dir),
515
+ check=False, # Run in the project directory
516
516
  )
517
517
 
518
518
  if proc.returncode == 0:
@@ -527,7 +527,8 @@ async def auto_initialize_vector_search():
527
527
  capture_output=True,
528
528
  text=True,
529
529
  timeout=300, # 5 minute timeout for indexing
530
- cwd=str(current_dir), check=False, # Run in the project directory
530
+ cwd=str(current_dir),
531
+ check=False, # Run in the project directory
531
532
  )
532
533
  if index_proc.returncode == 0:
533
534
  logger.info("✅ Project indexing completed successfully")
@@ -610,7 +611,8 @@ async def auto_initialize_kuzu_memory():
610
611
  ["pipx", "install", "kuzu-memory"],
611
612
  capture_output=True,
612
613
  text=True,
613
- timeout=60, check=False, # 1 minute timeout for installation
614
+ timeout=60,
615
+ check=False, # 1 minute timeout for installation
614
616
  )
615
617
 
616
618
  if result.returncode == 0:
@@ -679,7 +681,8 @@ async def auto_initialize_kuzu_memory():
679
681
  capture_output=True,
680
682
  text=True,
681
683
  timeout=30,
682
- cwd=str(current_dir), check=False,
684
+ cwd=str(current_dir),
685
+ check=False,
683
686
  )
684
687
 
685
688
  if proc.returncode == 0:
@@ -3,11 +3,11 @@ External MCP Services Integration
3
3
  ==================================
4
4
 
5
5
  Manages installation and basic setup of external MCP services like mcp-vector-search
6
- and mcp-browser. These services run as separate MCP servers in Claude Desktop,
6
+ and mcp-browser. These services run as separate MCP servers in Claude Code,
7
7
  not as part of the Claude MPM MCP Gateway.
8
8
 
9
9
  Note: As of the latest architecture, external services are registered as separate
10
- MCP servers in Claude Desktop configuration, not as tools within the gateway.
10
+ MCP servers in Claude Code configuration, not as tools within the gateway.
11
11
  """
12
12
 
13
13
  import json
@@ -397,11 +397,11 @@ class ExternalMCPServiceManager:
397
397
 
398
398
  This manager is responsible for checking and installing Python packages
399
399
  for external MCP services. The actual registration of these services
400
- happens in Claude Desktop configuration as separate MCP servers.
400
+ happens in Claude Code configuration as separate MCP servers.
401
401
 
402
402
  Note: This class is maintained for backward compatibility and package
403
403
  management. The actual tool registration is handled by separate MCP
404
- server instances in Claude Desktop.
404
+ server instances in Claude Code.
405
405
  """
406
406
 
407
407
  def __init__(self):
@@ -249,7 +249,8 @@ class KuzuMemoryService(BaseToolAdapter):
249
249
  capture_output=True,
250
250
  text=True,
251
251
  timeout=10,
252
- cwd=str(self.project_path), check=False,
252
+ cwd=str(self.project_path),
253
+ check=False,
253
254
  )
254
255
 
255
256
  if result.returncode == 0:
@@ -315,7 +316,8 @@ class KuzuMemoryService(BaseToolAdapter):
315
316
  capture_output=True,
316
317
  text=True,
317
318
  timeout=10,
318
- cwd=str(self.project_path), check=False,
319
+ cwd=str(self.project_path),
320
+ check=False,
319
321
  )
320
322
 
321
323
  if result.returncode == 0 and result.stdout:
@@ -384,7 +386,8 @@ class KuzuMemoryService(BaseToolAdapter):
384
386
  capture_output=True,
385
387
  text=True,
386
388
  timeout=10,
387
- cwd=str(self.project_path), check=False,
389
+ cwd=str(self.project_path),
390
+ check=False,
388
391
  )
389
392
 
390
393
  if result.returncode == 0 and result.stdout:
@@ -461,7 +464,8 @@ class KuzuMemoryService(BaseToolAdapter):
461
464
  capture_output=True,
462
465
  text=True,
463
466
  timeout=15,
464
- cwd=str(self.project_path), check=False,
467
+ cwd=str(self.project_path),
468
+ check=False,
465
469
  )
466
470
 
467
471
  if result.returncode == 0 and result.stdout:
@@ -974,7 +974,14 @@ This directory is used for {description.lower()}.
974
974
  misplaced_count = 0
975
975
  for file in root_files:
976
976
  if file.is_file():
977
- if ("test" in file.name.lower() and file.suffix == ".py") or (file.suffix in [".sh", ".bash"] and file.name not in ["Makefile"]) or file.suffix in [".log", ".tmp", ".cache"]:
977
+ if (
978
+ ("test" in file.name.lower() and file.suffix == ".py")
979
+ or (
980
+ file.suffix in [".sh", ".bash"]
981
+ and file.name not in ["Makefile"]
982
+ )
983
+ or file.suffix in [".log", ".tmp", ".cache"]
984
+ ):
978
985
  misplaced_count += 1
979
986
 
980
987
  if misplaced_count > 0:
@@ -344,8 +344,7 @@ class StructureAnalyzerStrategy(AnalyzerStrategy):
344
344
  config_files = {
345
345
  child["name"].lower()
346
346
  for child in tree.get("children", [])
347
- if (child["type"] == "file"
348
- and child["name"].startswith("."))
347
+ if (child["type"] == "file" and child["name"].startswith("."))
349
348
  or child["name"].endswith(".config.js")
350
349
  }
351
350
  patterns["has_config"] = len(config_files) > 0
@@ -603,9 +603,7 @@ class ContextStrategy(IConfigStrategy):
603
603
  return self.isolated_manager.create_isolated_context(
604
604
  kwargs.get("base_config")
605
605
  )
606
- return self.hierarchy_manager.create_context(
607
- scope, parent_id=parent, **kwargs
608
- )
606
+ return self.hierarchy_manager.create_context(scope, parent_id=parent, **kwargs)
609
607
 
610
608
  def get_current_context(self) -> Optional[str]:
611
609
  """Get current active context"""
@@ -345,7 +345,9 @@ class EnvironmentFileLoader(BaseFileLoader):
345
345
  value = value.strip()
346
346
 
347
347
  # Remove quotes if present
348
- if (value.startswith('"') and value.endswith('"')) or (value.startswith("'") and value.endswith("'")):
348
+ if (value.startswith('"') and value.endswith('"')) or (
349
+ value.startswith("'") and value.endswith("'")
350
+ ):
349
351
  value = value[1:-1]
350
352
 
351
353
  # Parse value type
@@ -3,7 +3,7 @@ from pathlib import Path
3
3
  """
4
4
  Claude Code Frontmatter Validator
5
5
 
6
- Validates agent frontmatter against Claude Code Desktop specification.
6
+ Validates agent frontmatter against Claude Code specification.
7
7
  Critical for ensuring agents work correctly with Claude Code.
8
8
  """
9
9
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 4.4.5
3
+ Version: 4.4.6
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
@@ -148,7 +148,9 @@ Dynamic: license-file
148
148
 
149
149
  # Claude MPM - Multi-Agent Project Manager
150
150
 
151
- A powerful orchestration framework for Claude Code that enables multi-agent workflows, session management, and real-time monitoring through a streamlined Rich-based interface.
151
+ A powerful orchestration framework for **Claude Code (CLI)** that enables multi-agent workflows, session management, and real-time monitoring through a streamlined Rich-based interface.
152
+
153
+ > **⚠️ Important**: Claude MPM extends **Claude Code (CLI)**, not Claude Desktop (app). All MCP integrations work with Claude Code's CLI interface only.
152
154
 
153
155
  > **Quick Start**: See [QUICKSTART.md](QUICKSTART.md) to get running in 5 minutes!
154
156
 
@@ -191,9 +193,10 @@ claude-mpm mcp-pipx-config
191
193
  ```
192
194
 
193
195
  **💡 Optional Dependencies**:
194
- - `[mcp]` - Include MCP services (mcp-vector-search, kuzu-memory) as dependencies
196
+ - `[mcp]` - Include MCP services (mcp-vector-search, mcp-browser, mcp-ticketer, kuzu-memory)
195
197
  - `[monitor]` - Full monitoring dashboard with Socket.IO and async web server components
196
- - Without optional dependencies, services auto-install on first use via pipx
198
+ - **Combine both**: Use `"claude-mpm[mcp,monitor]"` to install all features
199
+ - Without optional dependencies, MCP services auto-install on first use via pipx
197
200
 
198
201
  **🎉 Pipx Support Now Fully Functional!** Recent improvements ensure complete compatibility:
199
202
  - ✅ Socket.IO daemon script path resolution (fixed)
@@ -397,5 +400,5 @@ MIT License - see [LICENSE](LICENSE) file.
397
400
  ## Credits
398
401
 
399
402
  - Based on [claude-multiagent-pm](https://github.com/kfsone/claude-multiagent-pm)
400
- - Enhanced for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) integration
403
+ - Enhanced for [Claude Code (CLI)](https://docs.anthropic.com/en/docs/claude-code) integration
401
404
  - Built with ❤️ by the Claude MPM community
@@ -1,5 +1,5 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
2
- claude_mpm/VERSION,sha256=QzI5UiXbP6p_y2Z1w55VG-4c0j2s4tK81yJ4t45IDyg,6
2
+ claude_mpm/VERSION,sha256=M-cFSdn4NoMwZN-6G3jqIuaWG2LiBtAkXTZdmRNAyc8,6
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
@@ -84,11 +84,11 @@ claude_mpm/cli/commands/mcp.py,sha256=kgmJVTAi0G7SAnIpYHddU25HqAdIY9mMmTH-C3DSCs
84
84
  claude_mpm/cli/commands/mcp_command_router.py,sha256=8rTMZLxU3R3Izit9ia1Z_pIOq3bn2QjMPH4uvf1X9XY,6001
85
85
  claude_mpm/cli/commands/mcp_config.py,sha256=I-MQEJdL93Rj9lIkz-T4rZqxdy-ls1J7cfXIIKS3tys,4814
86
86
  claude_mpm/cli/commands/mcp_config_commands.py,sha256=TnTg7-erE5Z6O8C84o4lZITco72Wnu0FVlVF8tNVsP0,695
87
- claude_mpm/cli/commands/mcp_external_commands.py,sha256=NKkGRThwo57ynUqfeU3gXNg9H15MwOeQ9vbO6twJEsg,8989
88
- claude_mpm/cli/commands/mcp_install_commands.py,sha256=cZyUSh7O6Q5wJ8_ZS3eVTabq9eREJUWlVbsRemz9QQA,12826
87
+ claude_mpm/cli/commands/mcp_external_commands.py,sha256=iggHpJYRTuGZjksqe4-isdq_vD5Wq8O4PjUgEWAT-OY,8968
88
+ claude_mpm/cli/commands/mcp_install_commands.py,sha256=ToQXNZLl39U31N9F-TERDcO2ACM8tjPqpSQLPDUiWb4,12799
89
89
  claude_mpm/cli/commands/mcp_pipx_config.py,sha256=sE62VD6Q1CcO2k1nlbIhHMfAJFQTZfIzCss99LmfNqA,6088
90
90
  claude_mpm/cli/commands/mcp_server_commands.py,sha256=-1G_2Y5ScTvzDd-kY8fTAao2H6FH7DnsLimleF1rVqQ,6197
91
- claude_mpm/cli/commands/mcp_setup_external.py,sha256=grA8_mTPtxgkGCpipK6lFbLhxTBQyOunNgPa_xM5l0o,33623
91
+ claude_mpm/cli/commands/mcp_setup_external.py,sha256=QA4sIOmmog_ApQ4dUTV8NbTrYW2pIzmpN6hy648G_OQ,33605
92
92
  claude_mpm/cli/commands/mcp_tool_commands.py,sha256=q17GzlFT3JiLTrDqwPO2tz1-fKmPO5QU449syTnKTz4,1283
93
93
  claude_mpm/cli/commands/memory.py,sha256=Yzfs3_oiKciv3sfOoDm2lJL4M9idG7ARV3-sNw1ge_g,26186
94
94
  claude_mpm/cli/commands/monitor.py,sha256=S7kb2TnTmvX_T6iw5E1S5jlYNhbbBVFLCTlX5MGSLP8,9583
@@ -365,7 +365,7 @@ claude_mpm/generators/agent_profile_generator.py,sha256=8h3yjhnpNmgILzSddzPjFstG
365
365
  claude_mpm/hooks/__init__.py,sha256=rVD-1bitn454djWzRN3wNNcM7xrXU-YiufVFD2T4H0Y,303
366
366
  claude_mpm/hooks/base_hook.py,sha256=wKbT_0g3dhvkA48pTz4GJpZQw8URhaT0LpZnCc7CEas,5026
367
367
  claude_mpm/hooks/instruction_reinforcement.py,sha256=PnjfDSZ_72gbzHnRoug7qtXfpW5d1cxnmittpnPd2ws,11059
368
- claude_mpm/hooks/kuzu_memory_hook.py,sha256=ihgxOZDOMHEbHPSwtipr4tw4rQuf7fcQDA6pneBPjYw,11322
368
+ claude_mpm/hooks/kuzu_memory_hook.py,sha256=cuj8BThA0cr2jCwuhH1pkqLHOP2Yo5qfwSDF-QfqmuM,11354
369
369
  claude_mpm/hooks/memory_integration_hook.py,sha256=VAazT6soMWoPVlDzP17psft-TDTVdblXNR2pjYpfnh4,16652
370
370
  claude_mpm/hooks/tool_call_interceptor.py,sha256=k3Ghe2KvUs3y-5PcS63uHmBAxtUYraqq1bX9GN0QliU,7462
371
371
  claude_mpm/hooks/validation_hooks.py,sha256=_-o4ROSRVuNOMMUIkHOnj9K-zPyAbRwJdrLTxVDmL5k,6464
@@ -409,7 +409,7 @@ claude_mpm/services/event_aggregator.py,sha256=DDcehIZVpiEDzs9o18gDZyvjMBHCq2H8H
409
409
  claude_mpm/services/exceptions.py,sha256=5lVZETr_6-xk0ItH7BTfYUiX5RlckS1e8ah_UalYG9c,26475
410
410
  claude_mpm/services/hook_installer_service.py,sha256=z3kKeriEY1Y9bFesuGlHBxhCtc0Wzd3Zv02k2_rEyGo,19727
411
411
  claude_mpm/services/hook_service.py,sha256=rZnMn_4qxX5g9KAn0IQdoG50WmySNfsTmfG0XHuRHXk,15737
412
- claude_mpm/services/mcp_config_manager.py,sha256=jEmgtyElE5zaIfC8r6jD7aKT-iOGaf8Fo-r11RD_tHQ,28013
412
+ claude_mpm/services/mcp_config_manager.py,sha256=bMV3vkDahRjH94Ht91sUg1Ha8H1Sz63Q1AM9SddfvBY,28957
413
413
  claude_mpm/services/memory_hook_service.py,sha256=pRlTClkRcw30Jhwbha4BC8IMdzKZxF8aWqf52JlntgY,11600
414
414
  claude_mpm/services/monitor_build_service.py,sha256=8gWR9CaqgXdG6-OjOFXGpk28GCcJTlHhojkUYnMCebI,12160
415
415
  claude_mpm/services/port_manager.py,sha256=CYqLh8Ss_-aoYEXV3G6uZkGexpsRK_XTBL0bV4P3tSI,22838
@@ -544,20 +544,20 @@ claude_mpm/services/core/interfaces/communication.py,sha256=evwtLbYCFa3Zb8kEfL10
544
544
  claude_mpm/services/core/interfaces/infrastructure.py,sha256=eLtr_dFhA3Ux3mPOV_4DbWhGjHpfpGnj6xOhfQcgZGk,10037
545
545
  claude_mpm/services/core/interfaces/service.py,sha256=hNfHXe45LcPCp_dToOmZCfnUZBF5axMf_TdxqCSm2-I,11536
546
546
  claude_mpm/services/diagnostics/__init__.py,sha256=WTRucANR9EwNi53rotjkeE4k75s18RjHJ8s1BfBj7ic,614
547
- claude_mpm/services/diagnostics/diagnostic_runner.py,sha256=JEg3A82Tjib--5iLBOe6IwByzj6ospqXonGa9Z1iu1k,9354
548
- claude_mpm/services/diagnostics/doctor_reporter.py,sha256=b644RGLPylOGJEnzZqAXbImcdHLC9gzWWbv42WiGb58,19649
547
+ claude_mpm/services/diagnostics/diagnostic_runner.py,sha256=bfF3QQfaJPv2fyo61AstHZ139nHvY0fcjXXbXFcNdZo,9336
548
+ claude_mpm/services/diagnostics/doctor_reporter.py,sha256=WhlHBWy-KI8OhAWujOu77VAgSvkBvtF3sDrjacYZhvg,19649
549
549
  claude_mpm/services/diagnostics/models.py,sha256=nqOQLllZyZmw3Zt5eFJfE1Al7C3Vrn3REgFlARtT3jQ,3831
550
- claude_mpm/services/diagnostics/checks/__init__.py,sha256=KV-ZPxIDaL-yWZzJCfqoVqwqzqd7HO6lr7qZNFXYGA8,996
550
+ claude_mpm/services/diagnostics/checks/__init__.py,sha256=aNdOeJHZVIpEqqzr6xWUOiyZCIrN4vckfRxkW70cqeo,987
551
551
  claude_mpm/services/diagnostics/checks/agent_check.py,sha256=JZwqu4o4Q46uk2jKKU-AS0Y_n4AjVcmq2XR61t18UKE,14022
552
552
  claude_mpm/services/diagnostics/checks/base_check.py,sha256=FdCPk4z5wdBVR5Y4bikwVY4P4BIIXBkYCmhr-qu1ChM,1574
553
- claude_mpm/services/diagnostics/checks/claude_desktop_check.py,sha256=fRM-hZM5nkM4aB6PhbydSBLpM5u80xSyLXHu0AmI4qY,11337
553
+ claude_mpm/services/diagnostics/checks/claude_code_check.py,sha256=NoOwyP-UQT4dmqJARmtXj-LJThGi6X0oP0e3cckNzik,10413
554
554
  claude_mpm/services/diagnostics/checks/common_issues_check.py,sha256=Yi73_1yGNcQUCF8Jwba6xHvDHr4QbklWEbzidby-o0o,13353
555
555
  claude_mpm/services/diagnostics/checks/configuration_check.py,sha256=mgqFsyr4W73gFGMF7kz5u4lloUMhTty5BHuErf0I0Uo,11176
556
556
  claude_mpm/services/diagnostics/checks/filesystem_check.py,sha256=V5HoHDYlSuoK2lFv946Jhd81LrA0om71NWugnRxFvSE,8296
557
557
  claude_mpm/services/diagnostics/checks/installation_check.py,sha256=WoTt15R8Wg-6k2JZFAtmffFuih1AIyCX71QOHEFH-Ro,19562
558
558
  claude_mpm/services/diagnostics/checks/instructions_check.py,sha256=VbgBorl0RpFvxKQ_SC1gibTmGSiXaKSp-vVZt6hbH1g,16290
559
- claude_mpm/services/diagnostics/checks/mcp_check.py,sha256=_eM210SIyHwAcWi1AxUeRoessxumpTrSeVdHVJK5ja0,12191
560
- claude_mpm/services/diagnostics/checks/mcp_services_check.py,sha256=kWrQ_IKWV6z4WYmzZ5g2pGrh9uEYKRQK12yyS9dLj4Q,18461
559
+ claude_mpm/services/diagnostics/checks/mcp_check.py,sha256=SftuhP70abopyMD8GlLA_K3XHEYnBAeITggUQI0cYP4,12173
560
+ claude_mpm/services/diagnostics/checks/mcp_services_check.py,sha256=aH1YgyAAj3rj5H02adWUjM00KdZuOz4Qm9oyY4bgELc,19007
561
561
  claude_mpm/services/diagnostics/checks/monitor_check.py,sha256=NUx5G1yjHWlukZmwhUz4o8STRWgsQEx01YjIMReNC0A,10096
562
562
  claude_mpm/services/diagnostics/checks/startup_log_check.py,sha256=DrXdml2rHvmhFBdb_sntE3xmwaP_DZIKjdVbCn8Dy7E,12258
563
563
  claude_mpm/services/event_bus/__init__.py,sha256=ETCo4a6puIeyVWAv55uCDjjhzNyUwbVAHEcAVkVapx8,688
@@ -619,7 +619,7 @@ claude_mpm/services/mcp_gateway/core/__init__.py,sha256=iajLqFBrPixZiFmau3ZXC04m
619
619
  claude_mpm/services/mcp_gateway/core/base.py,sha256=uTML3OBCv1-4XhSnLsEkn1C9Z71glUnKBXALyUtB24o,10225
620
620
  claude_mpm/services/mcp_gateway/core/exceptions.py,sha256=oRCvGhGgXeqzzybiBz3KNBud5Dn6feBO9MQQUHuqyT0,6795
621
621
  claude_mpm/services/mcp_gateway/core/interfaces.py,sha256=wsBuwKRspW6YJxpOKXynFphObkZ5XzaneCNke7F4W1s,10100
622
- claude_mpm/services/mcp_gateway/core/process_pool.py,sha256=zIiSSSpH8oIC6TXgcT8hNO_-AwQptBAXfud6NsDW26I,27667
622
+ claude_mpm/services/mcp_gateway/core/process_pool.py,sha256=tQSbmv8ZIUqoT6f2nl2zzC66EuHMCJ8In7PtAtevsrI,27713
623
623
  claude_mpm/services/mcp_gateway/core/singleton_manager.py,sha256=yfyvt5macOsay82JTT10ya0jTwCAbsS1sdRcXOoC_bM,9422
624
624
  claude_mpm/services/mcp_gateway/core/startup_verification.py,sha256=9i9k_i15Lc1Vvk0U2GR7uBMTbU3Xf16J6xoEvR0r-Ww,10873
625
625
  claude_mpm/services/mcp_gateway/registry/__init__.py,sha256=6qjyfcCgW7sd_S82gY7G4DPZp3nL7tMHzyaxiz3G2Zc,195
@@ -632,10 +632,10 @@ claude_mpm/services/mcp_gateway/server/stdio_server.py,sha256=8HZfWbrysQB2lT9hJ3
632
632
  claude_mpm/services/mcp_gateway/tools/__init__.py,sha256=Ga0kbvNOi8peBRZk5MUnO5bo3jWDCpHFko7mO21Vix4,754
633
633
  claude_mpm/services/mcp_gateway/tools/base_adapter.py,sha256=na1MdyBCtVmKzgIcFJ5MuAUJ1LJrtA4yxkuqLnejiD8,16029
634
634
  claude_mpm/services/mcp_gateway/tools/document_summarizer.py,sha256=J0YNEu4GPxWm2nTMxD7CwWl-2k1UJk3tWCI2timGWbU,28230
635
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py,sha256=1lYp7EVkylCXNikkNKf3kpbv2WwT5b_YMmUPFYj1ugU,18626
635
+ claude_mpm/services/mcp_gateway/tools/external_mcp_services.py,sha256=PCw6egI7Vy7I-2l9ya9BZGusOdnQ3bY0uIJVSVnY_YA,18614
636
636
  claude_mpm/services/mcp_gateway/tools/health_check_tool.py,sha256=P9fjHO63_yG58z4OB36OuBTakYgzLgfhjhbCcX0t-mU,16456
637
637
  claude_mpm/services/mcp_gateway/tools/hello_world.py,sha256=NFtcz_lPu_55YQjugvYkFA5W7Fv_7iwxuWWS_uFlVzE,20308
638
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py,sha256=PzPLTCkcH65iN8VbgOS2tfuLPvxfjGHRkf1DfoQsga8,16766
638
+ claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py,sha256=Js2YI_jOd8lOlMYifeVzVwQEwVOViK1iIQNqpY6XXKs,16830
639
639
  claude_mpm/services/memory/__init__.py,sha256=vOZrdDfYdgjV5jhUyqGiICoywAwUNGcE_d7z1XfKTyE,472
640
640
  claude_mpm/services/memory/builder.py,sha256=GyqyJAiOYuYZ2rULKunNf2Rf4C1slAKkUnELBy8pZV0,34365
641
641
  claude_mpm/services/memory/indexed_memory.py,sha256=aK5Fo1_P87kHVex7H2FE3mLquZsw1OKdtreIigymWJ0,19538
@@ -668,7 +668,7 @@ claude_mpm/services/project/documentation_manager.py,sha256=pa8AjP94O4G-3wwt6RD3
668
668
  claude_mpm/services/project/enhanced_analyzer.py,sha256=vt9K-M7e5LWMO7c6cFmQQGotceF9WRnfALZZpD3nY_g,18540
669
669
  claude_mpm/services/project/language_analyzer.py,sha256=KnbwHLtUcnzdMY6bseZk90bMo0yI9n_pXP5Mj4tLDgg,9209
670
670
  claude_mpm/services/project/metrics_collector.py,sha256=nqsf2zcVVQU785dYmZ45cex3PByk56NCFC93mr4McIM,12873
671
- claude_mpm/services/project/project_organizer.py,sha256=Phs-6BrMpzGpfiMy2ASFMWpdZI_IVJAFtjd4-kBu1fQ,37347
671
+ claude_mpm/services/project/project_organizer.py,sha256=sTxwlsHpVhjYvP4x6gDXjAGESVbwwinuOEn2qm4EPWE,37497
672
672
  claude_mpm/services/project/registry.py,sha256=XhPmkuEz9tKKKnT9Ca1zsUuNgZJQy40WFHJERj09-40,24166
673
673
  claude_mpm/services/shared/__init__.py,sha256=9sL2GHHGg8-lboHTZ8mzIfhcCWiFCQyWbpC27jkBRI0,597
674
674
  claude_mpm/services/shared/async_service_base.py,sha256=46Z-ATX5N0FhugNsF6byJ42frs4Rw5ZWfhw3Paf2788,7010
@@ -717,12 +717,12 @@ claude_mpm/services/unified/analyzer_strategies/code_analyzer.py,sha256=tnr6NYEq
717
717
  claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py,sha256=XDGkLdes8T4EJ4wjF8lqZN8RdwXglbPiZMOZ_xfmNik,24150
718
718
  claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py,sha256=s0r7sMQl5yIhvUOFFBkkcIAPwGx4m2x0JcwzaURryeU,33630
719
719
  claude_mpm/services/unified/analyzer_strategies/security_analyzer.py,sha256=r2xQsVw8wQ2r6RnG088DgNuPZX0sT6y72xtTw3Om3bA,26496
720
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py,sha256=fpmm1fseHBMmq_iEsQYWsbaWXIT6Gx_YxQqZARN8m44,25261
720
+ claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py,sha256=qmo1uwo4fOxqP6Y4E0X502pe9-RxMBnSWNpPtpECQNU,25249
721
721
  claude_mpm/services/unified/config_strategies/__init__.py,sha256=FamM4maazbaaGdfWSOh26dXmFCCPA3T4FY55xjcUexI,4298
722
722
  claude_mpm/services/unified/config_strategies/config_schema.py,sha256=Ub0V7MZbMoPv4_E6XKVsBhalU36MoXuO_0WJtwvYrmE,24813
723
- claude_mpm/services/unified/config_strategies/context_strategy.py,sha256=Gx0N8AybS1aNBIfMtfSDf8CikQEpyU9DHLOqdeOCgh4,25270
723
+ claude_mpm/services/unified/config_strategies/context_strategy.py,sha256=s2fDagOWd137E-ooMvy-CneNO76zDtpB3Ey7meUtUgg,25248
724
724
  claude_mpm/services/unified/config_strategies/error_handling_strategy.py,sha256=qsGxBnGF0TDTKZFTPKUApwB9coXpWXdVz92q-z84VX0,35794
725
- claude_mpm/services/unified/config_strategies/file_loader_strategy.py,sha256=jY4nvAY1CuYeOsJ5DYdpw_TuW85AeI7E7SGU-Cvm2Cc,29505
725
+ claude_mpm/services/unified/config_strategies/file_loader_strategy.py,sha256=SezFF0yqQMaNDMRz3sIbZa-P66Vbim2WAMgHMyCGZSw,29543
726
726
  claude_mpm/services/unified/config_strategies/unified_config_service.py,sha256=DPClh8rKOC_rXoVezYYpWaFLDhf9XmKhrF5WKQqudAE,29513
727
727
  claude_mpm/services/unified/config_strategies/validation_strategy.py,sha256=iewOimV4gtj6wo6HKahCXC8Jczzt8cCGut0gq5jPAZY,38862
728
728
  claude_mpm/services/unified/deployment_strategies/__init__.py,sha256=nOaXf2mlFItXiNOBzizl8QxNWVEVBNIDq6uBw0gatpw,2986
@@ -769,10 +769,10 @@ claude_mpm/utils/session_logging.py,sha256=_6eoyCvVKhu2OhgRzC5FvMfFnD9et75lzCqAR
769
769
  claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalNmfX9KlM,10443
770
770
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
771
771
  claude_mpm/validation/agent_validator.py,sha256=Nm2WmcbCb0EwOG4nFcikc3wVdiiAfjGBBI3YoR6ainQ,20915
772
- claude_mpm/validation/frontmatter_validator.py,sha256=u8g4Eyd_9O6ugj7Un47oSGh3kqv4wMkuks2i_CtWRvM,7028
773
- claude_mpm-4.4.5.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
774
- claude_mpm-4.4.5.dist-info/METADATA,sha256=VkuECGtrJPRYkQ4lnwvJ6lT2C6QiMxDmdchcuW3gx3E,16999
775
- claude_mpm-4.4.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
776
- claude_mpm-4.4.5.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
777
- claude_mpm-4.4.5.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
778
- claude_mpm-4.4.5.dist-info/RECORD,,
772
+ claude_mpm/validation/frontmatter_validator.py,sha256=IDBOCBweO6umydSnUJjBh81sKk3cy9hRFYm61DCiXbI,7020
773
+ claude_mpm-4.4.6.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
774
+ claude_mpm-4.4.6.dist-info/METADATA,sha256=31bVYfdqk4nEHGwBEE4wdir7O7A2MVEjtKyJiNr-Sew,17264
775
+ claude_mpm-4.4.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
776
+ claude_mpm-4.4.6.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
777
+ claude_mpm-4.4.6.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
778
+ claude_mpm-4.4.6.dist-info/RECORD,,