claude-mpm 4.4.11__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 +1 -1
- claude_mpm/cli/__init__.py +26 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +27 -14
- claude_mpm/services/mcp_config_manager.py +58 -42
- {claude_mpm-4.4.11.dist-info → claude_mpm-4.4.12.dist-info}/METADATA +1 -1
- {claude_mpm-4.4.11.dist-info → claude_mpm-4.4.12.dist-info}/RECORD +10 -10
- {claude_mpm-4.4.11.dist-info → claude_mpm-4.4.12.dist-info}/WHEEL +0 -0
- {claude_mpm-4.4.11.dist-info → claude_mpm-4.4.12.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.4.11.dist-info → claude_mpm-4.4.12.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.4.11.dist-info → claude_mpm-4.4.12.dist-info}/top_level.txt +0 -0
claude_mpm/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.4.
|
1
|
+
4.4.12
|
claude_mpm/cli/__init__.py
CHANGED
@@ -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
|
"""
|
@@ -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
|
875
|
-
|
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="
|
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
|
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
|
-
#
|
892
|
-
|
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
|
915
|
+
if service_name in mcp_servers:
|
898
916
|
configured_services.append(service_name)
|
899
917
|
else:
|
900
|
-
|
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", #
|
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", #
|
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", #
|
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
|
-
#
|
66
|
-
"command":
|
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
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
353
|
-
"/
|
354
|
-
"/
|
355
|
-
|
356
|
-
]
|
357
|
-
|
358
|
-
|
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
|
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
|
-
|
382
|
-
"/
|
383
|
-
"/
|
384
|
-
|
385
|
-
]
|
386
|
-
|
387
|
-
|
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
|
-
|
390
|
-
|
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,5 +1,5 @@
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
|
2
|
-
claude_mpm/VERSION,sha256
|
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
|
@@ -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=
|
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
|
@@ -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=
|
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=
|
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.
|
777
|
-
claude_mpm-4.4.
|
778
|
-
claude_mpm-4.4.
|
779
|
-
claude_mpm-4.4.
|
780
|
-
claude_mpm-4.4.
|
781
|
-
claude_mpm-4.4.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|