claude-mpm 4.3.11__py3-none-any.whl → 4.3.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.
Files changed (31) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/templates/research.json +20 -8
  3. claude_mpm/agents/templates/web_qa.json +25 -10
  4. claude_mpm/cli/__init__.py +1 -0
  5. claude_mpm/cli/commands/mcp_command_router.py +11 -0
  6. claude_mpm/cli/commands/mcp_config.py +157 -0
  7. claude_mpm/cli/commands/mcp_external_commands.py +241 -0
  8. claude_mpm/cli/commands/mcp_install_commands.py +64 -23
  9. claude_mpm/cli/commands/mcp_setup_external.py +829 -0
  10. claude_mpm/cli/commands/run.py +70 -0
  11. claude_mpm/cli/commands/search.py +285 -0
  12. claude_mpm/cli/parsers/base_parser.py +13 -0
  13. claude_mpm/cli/parsers/mcp_parser.py +17 -0
  14. claude_mpm/cli/parsers/run_parser.py +5 -0
  15. claude_mpm/cli/parsers/search_parser.py +239 -0
  16. claude_mpm/constants.py +1 -0
  17. claude_mpm/core/unified_agent_registry.py +7 -0
  18. claude_mpm/services/agents/deployment/agent_deployment.py +28 -13
  19. claude_mpm/services/agents/deployment/agent_discovery_service.py +16 -6
  20. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +6 -4
  21. claude_mpm/services/cli/agent_cleanup_service.py +5 -0
  22. claude_mpm/services/mcp_config_manager.py +294 -0
  23. claude_mpm/services/mcp_gateway/config/configuration.py +17 -0
  24. claude_mpm/services/mcp_gateway/main.py +38 -0
  25. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +390 -0
  26. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.12.dist-info}/METADATA +4 -1
  27. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.12.dist-info}/RECORD +31 -24
  28. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.12.dist-info}/WHEEL +0 -0
  29. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.12.dist-info}/entry_points.txt +0 -0
  30. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.12.dist-info}/licenses/LICENSE +0 -0
  31. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.12.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,390 @@
1
+ """
2
+ External MCP Services Integration
3
+ ==================================
4
+
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,
7
+ not as part of the Claude MPM MCP Gateway.
8
+
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.
11
+ """
12
+
13
+ import asyncio
14
+ import json
15
+ import subprocess
16
+ import sys
17
+ from pathlib import Path
18
+ from typing import Any, Dict, List, Optional
19
+
20
+ from claude_mpm.services.mcp_gateway.core.base import BaseMCPService
21
+ from claude_mpm.services.mcp_gateway.tools.base_adapter import BaseMCPToolAdapter
22
+
23
+
24
+ class ExternalMCPService(BaseMCPToolAdapter):
25
+ """Base class for external MCP service integration."""
26
+
27
+ def __init__(self, service_name: str, package_name: str):
28
+ """
29
+ Initialize external MCP service.
30
+
31
+ Args:
32
+ service_name: Name of the service for MCP
33
+ package_name: Python package name to install/run
34
+ """
35
+ super().__init__()
36
+ self.service_name = service_name
37
+ self.package_name = package_name
38
+ self.process = None
39
+ self._is_installed = False
40
+
41
+ async def initialize(self) -> bool:
42
+ """Initialize the external service."""
43
+ try:
44
+ # Check if package is installed
45
+ self._is_installed = await self._check_installation()
46
+
47
+ if not self._is_installed:
48
+ self.logger.warning(f"{self.package_name} not installed, attempting installation...")
49
+ await self._install_package()
50
+ self._is_installed = await self._check_installation()
51
+
52
+ if not self._is_installed:
53
+ self.logger.error(f"Failed to install {self.package_name}")
54
+ return False
55
+
56
+ self.logger.info(f"{self.package_name} is available")
57
+ return True
58
+
59
+ except Exception as e:
60
+ self.logger.error(f"Failed to initialize {self.service_name}: {e}")
61
+ return False
62
+
63
+ async def _check_installation(self) -> bool:
64
+ """Check if the package is installed."""
65
+ try:
66
+ result = subprocess.run(
67
+ [sys.executable, "-m", self.package_name.replace("-", "_"), "--help"],
68
+ capture_output=True,
69
+ text=True,
70
+ timeout=5
71
+ )
72
+ return result.returncode == 0
73
+ except (subprocess.TimeoutExpired, FileNotFoundError, subprocess.CalledProcessError):
74
+ return False
75
+
76
+ async def _install_package(self) -> bool:
77
+ """Install the package using pip."""
78
+ try:
79
+ self.logger.info(f"Installing {self.package_name}...")
80
+ result = subprocess.run(
81
+ [sys.executable, "-m", "pip", "install", self.package_name],
82
+ capture_output=True,
83
+ text=True,
84
+ timeout=30
85
+ )
86
+
87
+ if result.returncode == 0:
88
+ self.logger.info(f"Successfully installed {self.package_name}")
89
+ return True
90
+ else:
91
+ self.logger.error(f"Failed to install {self.package_name}: {result.stderr}")
92
+ return False
93
+
94
+ except Exception as e:
95
+ self.logger.error(f"Error installing {self.package_name}: {e}")
96
+ return False
97
+
98
+ def get_definition(self) -> Dict[str, Any]:
99
+ """Get service definition for MCP registration."""
100
+ return {
101
+ "name": self.service_name,
102
+ "description": f"External MCP service: {self.package_name}",
103
+ "type": "external_service",
104
+ "package": self.package_name,
105
+ "installed": self._is_installed
106
+ }
107
+
108
+
109
+ class MCPVectorSearchService(ExternalMCPService):
110
+ """MCP Vector Search service integration."""
111
+
112
+ def __init__(self):
113
+ """Initialize MCP Vector Search service."""
114
+ super().__init__("mcp-vector-search", "mcp-vector-search")
115
+
116
+ def get_definition(self) -> Dict[str, Any]:
117
+ """Get tool definition for MCP registration."""
118
+ base_def = super().get_definition()
119
+ base_def.update({
120
+ "description": "Semantic code search powered by vector embeddings",
121
+ "tools": [
122
+ {
123
+ "name": "mcp__mcp-vector-search__search_code",
124
+ "description": "Search for code using semantic similarity",
125
+ "inputSchema": {
126
+ "type": "object",
127
+ "properties": {
128
+ "query": {"type": "string", "description": "The search query"},
129
+ "limit": {"type": "integer", "default": 10},
130
+ "similarity_threshold": {"type": "number", "default": 0.3},
131
+ "language": {"type": "string"},
132
+ "file_extensions": {"type": "array", "items": {"type": "string"}},
133
+ "files": {"type": "string"},
134
+ "class_name": {"type": "string"},
135
+ "function_name": {"type": "string"}
136
+ },
137
+ "required": ["query"]
138
+ }
139
+ },
140
+ {
141
+ "name": "mcp__mcp-vector-search__search_similar",
142
+ "description": "Find code similar to a specific file or function",
143
+ "inputSchema": {
144
+ "type": "object",
145
+ "properties": {
146
+ "file_path": {"type": "string", "description": "Path to the file"},
147
+ "function_name": {"type": "string"},
148
+ "limit": {"type": "integer", "default": 10},
149
+ "similarity_threshold": {"type": "number", "default": 0.3}
150
+ },
151
+ "required": ["file_path"]
152
+ }
153
+ },
154
+ {
155
+ "name": "mcp__mcp-vector-search__search_context",
156
+ "description": "Search for code based on contextual description",
157
+ "inputSchema": {
158
+ "type": "object",
159
+ "properties": {
160
+ "description": {"type": "string", "description": "Contextual description"},
161
+ "focus_areas": {"type": "array", "items": {"type": "string"}},
162
+ "limit": {"type": "integer", "default": 10}
163
+ },
164
+ "required": ["description"]
165
+ }
166
+ },
167
+ {
168
+ "name": "mcp__mcp-vector-search__get_project_status",
169
+ "description": "Get project indexing status and statistics",
170
+ "inputSchema": {
171
+ "type": "object",
172
+ "properties": {},
173
+ "required": []
174
+ }
175
+ },
176
+ {
177
+ "name": "mcp__mcp-vector-search__index_project",
178
+ "description": "Index or reindex the project codebase",
179
+ "inputSchema": {
180
+ "type": "object",
181
+ "properties": {
182
+ "force": {"type": "boolean", "default": False},
183
+ "file_extensions": {"type": "array", "items": {"type": "string"}}
184
+ },
185
+ "required": []
186
+ }
187
+ }
188
+ ]
189
+ })
190
+ return base_def
191
+
192
+ async def invoke(self, tool_name: str, arguments: Dict[str, Any]) -> Dict[str, Any]:
193
+ """Invoke a tool from mcp-vector-search."""
194
+ try:
195
+ # Extract the actual tool name (remove prefix)
196
+ actual_tool = tool_name.replace("mcp__mcp-vector-search__", "")
197
+
198
+ # Prepare the command
199
+ cmd = [
200
+ sys.executable, "-m", "mcp_vector_search",
201
+ "--tool", actual_tool,
202
+ "--args", json.dumps(arguments)
203
+ ]
204
+
205
+ # Run the command
206
+ result = subprocess.run(
207
+ cmd,
208
+ capture_output=True,
209
+ text=True,
210
+ timeout=30,
211
+ cwd=Path.cwd() # Use current working directory for project context
212
+ )
213
+
214
+ if result.returncode == 0:
215
+ try:
216
+ return json.loads(result.stdout)
217
+ except json.JSONDecodeError:
218
+ return {"result": result.stdout}
219
+ else:
220
+ return {"error": result.stderr or "Tool invocation failed"}
221
+
222
+ except subprocess.TimeoutExpired:
223
+ return {"error": "Tool invocation timed out"}
224
+ except Exception as e:
225
+ return {"error": str(e)}
226
+
227
+
228
+ class MCPBrowserService(ExternalMCPService):
229
+ """MCP Browser service integration."""
230
+
231
+ def __init__(self):
232
+ """Initialize MCP Browser service."""
233
+ super().__init__("mcp-browser", "mcp-browser")
234
+
235
+ def get_definition(self) -> Dict[str, Any]:
236
+ """Get tool definition for MCP registration."""
237
+ base_def = super().get_definition()
238
+ base_def.update({
239
+ "description": "Web browsing and content extraction capabilities",
240
+ "tools": [
241
+ {
242
+ "name": "mcp__mcp-browser__browse",
243
+ "description": "Browse a webpage and extract content",
244
+ "inputSchema": {
245
+ "type": "object",
246
+ "properties": {
247
+ "url": {"type": "string", "description": "URL to browse"},
248
+ "extract": {"type": "string", "description": "What to extract"}
249
+ },
250
+ "required": ["url"]
251
+ }
252
+ },
253
+ {
254
+ "name": "mcp__mcp-browser__search",
255
+ "description": "Search the web",
256
+ "inputSchema": {
257
+ "type": "object",
258
+ "properties": {
259
+ "query": {"type": "string", "description": "Search query"},
260
+ "num_results": {"type": "integer", "default": 10}
261
+ },
262
+ "required": ["query"]
263
+ }
264
+ },
265
+ {
266
+ "name": "mcp__mcp-browser__screenshot",
267
+ "description": "Take a screenshot of a webpage",
268
+ "inputSchema": {
269
+ "type": "object",
270
+ "properties": {
271
+ "url": {"type": "string", "description": "URL to screenshot"},
272
+ "full_page": {"type": "boolean", "default": False}
273
+ },
274
+ "required": ["url"]
275
+ }
276
+ }
277
+ ]
278
+ })
279
+ return base_def
280
+
281
+ async def invoke(self, tool_name: str, arguments: Dict[str, Any]) -> Dict[str, Any]:
282
+ """Invoke a tool from mcp-browser."""
283
+ try:
284
+ # Extract the actual tool name (remove prefix)
285
+ actual_tool = tool_name.replace("mcp__mcp-browser__", "")
286
+
287
+ # Prepare the command
288
+ cmd = [
289
+ sys.executable, "-m", "mcp_browser",
290
+ "--tool", actual_tool,
291
+ "--args", json.dumps(arguments)
292
+ ]
293
+
294
+ # Run the command
295
+ result = subprocess.run(
296
+ cmd,
297
+ capture_output=True,
298
+ text=True,
299
+ timeout=30
300
+ )
301
+
302
+ if result.returncode == 0:
303
+ try:
304
+ return json.loads(result.stdout)
305
+ except json.JSONDecodeError:
306
+ return {"result": result.stdout}
307
+ else:
308
+ return {"error": result.stderr or "Tool invocation failed"}
309
+
310
+ except subprocess.TimeoutExpired:
311
+ return {"error": "Tool invocation timed out"}
312
+ except Exception as e:
313
+ return {"error": str(e)}
314
+
315
+
316
+ class ExternalMCPServiceManager:
317
+ """Manager for external MCP services.
318
+
319
+ This manager is responsible for checking and installing Python packages
320
+ for external MCP services. The actual registration of these services
321
+ happens in Claude Desktop configuration as separate MCP servers.
322
+
323
+ Note: This class is maintained for backward compatibility and package
324
+ management. The actual tool registration is handled by separate MCP
325
+ server instances in Claude Desktop.
326
+ """
327
+
328
+ def __init__(self):
329
+ """Initialize the service manager."""
330
+ self.services: List[ExternalMCPService] = []
331
+ self.logger = None
332
+
333
+ async def initialize_services(self) -> List[ExternalMCPService]:
334
+ """Initialize all external MCP services.
335
+
336
+ This method checks if external service packages are installed
337
+ and attempts to install them if missing. It does NOT register
338
+ them as tools in the gateway - they run as separate MCP servers.
339
+ """
340
+ # Create service instances
341
+ services = [
342
+ MCPVectorSearchService(),
343
+ MCPBrowserService()
344
+ ]
345
+
346
+ # Initialize each service
347
+ initialized_services = []
348
+ for service in services:
349
+ try:
350
+ if await service.initialize():
351
+ initialized_services.append(service)
352
+ if self.logger:
353
+ self.logger.info(f"Initialized external service: {service.service_name}")
354
+ else:
355
+ if self.logger:
356
+ self.logger.warning(f"Failed to initialize: {service.service_name}")
357
+ except Exception as e:
358
+ if self.logger:
359
+ self.logger.error(f"Error initializing {service.service_name}: {e}")
360
+
361
+ self.services = initialized_services
362
+ return initialized_services
363
+
364
+ def get_all_tools(self) -> List[Dict[str, Any]]:
365
+ """Get all tool definitions from external services."""
366
+ all_tools = []
367
+ for service in self.services:
368
+ service_def = service.get_definition()
369
+ if "tools" in service_def:
370
+ all_tools.extend(service_def["tools"])
371
+ return all_tools
372
+
373
+ async def invoke_tool(self, tool_name: str, arguments: Dict[str, Any]) -> Dict[str, Any]:
374
+ """Invoke a tool from any registered external service."""
375
+ # Find the service that handles this tool
376
+ for service in self.services:
377
+ if tool_name.startswith(f"mcp__{service.service_name}__"):
378
+ if isinstance(service, (MCPVectorSearchService, MCPBrowserService)):
379
+ return await service.invoke(tool_name, arguments)
380
+
381
+ return {"error": f"No service found for tool: {tool_name}"}
382
+
383
+ async def shutdown(self):
384
+ """Shutdown all external services."""
385
+ for service in self.services:
386
+ try:
387
+ await service.shutdown()
388
+ except Exception as e:
389
+ if self.logger:
390
+ self.logger.warning(f"Error shutting down {service.service_name}: {e}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 4.3.11
3
+ Version: 4.3.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
@@ -42,6 +42,9 @@ Requires-Dist: mistune>=3.0.0
42
42
  Requires-Dist: tree-sitter>=0.21.0
43
43
  Requires-Dist: ijson>=3.2.0
44
44
  Requires-Dist: mcp>=0.1.0
45
+ Requires-Dist: mcp-vector-search>=0.1.0
46
+ Requires-Dist: mcp-browser>=0.1.0
47
+ Requires-Dist: mcp-ticketer>=0.1.0
45
48
  Requires-Dist: toml>=0.10.2
46
49
  Requires-Dist: packaging>=21.0
47
50
  Requires-Dist: pydantic>=2.0.0
@@ -1,8 +1,8 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
2
- claude_mpm/VERSION,sha256=_YihcuL71QczyeZsmxgQB-zTENvbw1JSC9QA0U9eW4k,7
2
+ claude_mpm/VERSION,sha256=-c_4_NgMIALgH77IeTHbK7fYo3M_daC6Uf2bbEBnd80,7
3
3
  claude_mpm/__init__.py,sha256=lyTZAYGH4DTaFGLRNWJKk5Q5oTjzN5I6AXmfVX-Jff0,1512
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
- claude_mpm/constants.py,sha256=xnjYxUUVufwp4fIMpAwKiMC5MP14-c2HSAz5R9O3G-U,5927
5
+ claude_mpm/constants.py,sha256=cChN3myrAcF3jC-6DvHnBFTEnwlDk-TAsIXPvUZr_yw,5953
6
6
  claude_mpm/init.py,sha256=mcBonXUyP9pxEFFYfFcQ4OFLWiICT1XnonM_EdjIhoI,15133
7
7
  claude_mpm/ticket_wrapper.py,sha256=qe5xY579t7_7fK5nyeAfHN_fr7CXdeOD3jfXEc8-7yo,828
8
8
  claude_mpm/agents/BASE_AGENT_TEMPLATE.md,sha256=aK9qxS1FRpm_8VaB5GI2I6YA9Wr8dGHuea_txMFe44M,5524
@@ -48,18 +48,18 @@ claude_mpm/agents/templates/python_engineer.json,sha256=lDlSO-CVtmRjgaE6fapJtRVx
48
48
  claude_mpm/agents/templates/qa.json,sha256=pHdf-N4k2FJLczuQcBONV1lo8hUXut9tpknyDal3C4A,9590
49
49
  claude_mpm/agents/templates/react_engineer.json,sha256=YTstpd82AfmKQ9uu34sb_xdX02rFCA9Xe9oz8XuHdaw,12436
50
50
  claude_mpm/agents/templates/refactoring_engineer.json,sha256=PjaJx7AP-pRqZhZmbkHpZmD-ApeHy934cvq6SeJMk5A,11877
51
- claude_mpm/agents/templates/research.json,sha256=f-IsmrKFbSJmpaGUOuqJBc0CbWi9Zz29e2cwFlYyWA0,10679
51
+ claude_mpm/agents/templates/research.json,sha256=c25Q6L-oOKEF-MgRye8hsQCfKzBjluXikq4z386M-Fk,12157
52
52
  claude_mpm/agents/templates/security.json,sha256=YBQXtbkyFznUGW0P9YoVgRe--0GYbnFHTj5ol0FWxGQ,24216
53
53
  claude_mpm/agents/templates/ticketing.json,sha256=MaLL7xBpZoqghVJ-cQNQOKHoGTkdiaJgE8ysZJqTiwM,11514
54
54
  claude_mpm/agents/templates/vercel_ops_agent.json,sha256=UCtq8YWxsw0MYjN078IRmeHyQFH1PG0Iv0xaodtyFN0,26985
55
55
  claude_mpm/agents/templates/version_control.json,sha256=fv4pCG-6DeFjB5cFnlC9otVmHUCl-9cJ9vgkQE0MOcw,14430
56
- claude_mpm/agents/templates/web_qa.json,sha256=oMMyZTpg8J4ylmWqqUajjV2ogz92e3nbnniK_1KVqhk,15326
56
+ claude_mpm/agents/templates/web_qa.json,sha256=NtVuMrpWEAeLzewgbBcdpYRlMk5TJMq4UPSODEsnXig,17887
57
57
  claude_mpm/agents/templates/web_ui.json,sha256=tqdNRMP8EgBL-yNSQ06WxMTyAziSbWVVqjqm6rLzmdw,34852
58
58
  claude_mpm/agents/templates/.claude-mpm/memories/README.md,sha256=vEiG7cPjHRZfwX2IQB-i30ArO8zJyuxMJzHh8hnVZ6A,483
59
59
  claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md,sha256=KMZSJrQi-wHOwfl2C0m3A4PpC4QuBtDolAtVybGahKc,77
60
60
  claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md,sha256=UBm4BycXtdaa-_l1VCh0alTGGOUSsnCbpKwbFuI-mUY,2219
61
61
  claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md,sha256=oPvFSYFnmJ4TkbTe4AZnNHWaJMJ-xqZP2WM6scUKQKo,13089
62
- claude_mpm/cli/__init__.py,sha256=UZYkfKsQKQKP-c2wo3WYPEIVTpqmVFd7ABbtA4eda3c,18552
62
+ claude_mpm/cli/__init__.py,sha256=U_ZoiMocO4sOT1aBF2CH1OiB5-88PFKIUfnUPDaM0_c,18615
63
63
  claude_mpm/cli/__main__.py,sha256=WnVGBwe10InxuZjJRFdwuMF6Gh16aXox6zFgxr0sRXk,847
64
64
  claude_mpm/cli/parser.py,sha256=Vqx9n-6Xo1uNhXR4rThmgWpZXTr0nOtkgDf3oMS9b0g,5855
65
65
  claude_mpm/cli/startup_logging.py,sha256=g02F_K1WvMhGgq_8UHwbXRJyVwYgaRbO20wfb3GyWW4,24155
@@ -81,17 +81,21 @@ claude_mpm/cli/commands/debug.py,sha256=cYQXXZQiHja-1lygyd0PMlrZVdOHRsflyfO3d2Dh
81
81
  claude_mpm/cli/commands/doctor.py,sha256=bOZzDNxEMNMZYrJnu_V82tyZ12r5FiBRQNLVfSVvRIQ,5774
82
82
  claude_mpm/cli/commands/info.py,sha256=uiZ2GMkfr-4aeme2l6QhzxyawuhtuyVulfCi66yyvOs,7404
83
83
  claude_mpm/cli/commands/mcp.py,sha256=um78Q7o3g8FZ0LcKXiJkGLSo-y-RMgvqlNELM04rijY,7120
84
- claude_mpm/cli/commands/mcp_command_router.py,sha256=sdVddklgYGOFcDZ5E86YZ-nnZ5XCz7fBR33w9rVRnaE,5552
84
+ claude_mpm/cli/commands/mcp_command_router.py,sha256=j4tmnPRAmMlmtcP-n8Kl6S4l1vn3YY_dE79R3S4xpQ8,5984
85
+ claude_mpm/cli/commands/mcp_config.py,sha256=SAw3gup7t2W6mrSTSOO8SIvBxYEVpO6WZt5s-CivUBU,4880
85
86
  claude_mpm/cli/commands/mcp_config_commands.py,sha256=TnTg7-erE5Z6O8C84o4lZITco72Wnu0FVlVF8tNVsP0,695
86
- claude_mpm/cli/commands/mcp_install_commands.py,sha256=cp98UMpGMyFqrgTlh2YAeNRZ_jrv_pzMeWzdkKcAteU,10272
87
+ claude_mpm/cli/commands/mcp_external_commands.py,sha256=HGAFxA5xzdHMq1iZ6Ei31N2XHvxkN_c9XvAoLKhp7ec,8919
88
+ claude_mpm/cli/commands/mcp_install_commands.py,sha256=IjG_PkOaR8CyOmUkmsPdGe0YYOXF6TZ77HVaPq9OxLo,12399
87
89
  claude_mpm/cli/commands/mcp_pipx_config.py,sha256=sE62VD6Q1CcO2k1nlbIhHMfAJFQTZfIzCss99LmfNqA,6088
88
90
  claude_mpm/cli/commands/mcp_server_commands.py,sha256=-1G_2Y5ScTvzDd-kY8fTAao2H6FH7DnsLimleF1rVqQ,6197
91
+ claude_mpm/cli/commands/mcp_setup_external.py,sha256=pbxrBH9j7AxRnqr3i-ULU0_FFCe3JlrKBAWoqQIzYRU,32496
89
92
  claude_mpm/cli/commands/mcp_tool_commands.py,sha256=q17GzlFT3JiLTrDqwPO2tz1-fKmPO5QU449syTnKTz4,1283
90
93
  claude_mpm/cli/commands/memory.py,sha256=Yzfs3_oiKciv3sfOoDm2lJL4M9idG7ARV3-sNw1ge_g,26186
91
94
  claude_mpm/cli/commands/monitor.py,sha256=Y4on91KW6Ye5NIglHnMVG8hhzw8ZRslBm1oMm6KC48s,9556
92
95
  claude_mpm/cli/commands/mpm_init.py,sha256=lO7N91ZHn_n18XbchUUcYoyme7L5NLcXVnhWm5F_Gq8,22367
93
96
  claude_mpm/cli/commands/mpm_init_handler.py,sha256=-pCB0XL3KipqGtnta8CC7Lg5TPMwstEhMFBcgF4aaa4,2919
94
- claude_mpm/cli/commands/run.py,sha256=v7nkUjTv1gnm8i57ax6I4Ce8BLIbNEvgcVUzkb6a3Pg,43523
97
+ claude_mpm/cli/commands/run.py,sha256=zaeqGoaurakkRRD6o4J8CBgywTxOTaAGrJX692fpR4w,46603
98
+ claude_mpm/cli/commands/search.py,sha256=3-uCE_maUXNSorCMk4qXncCvpl3320Qu2qeVl6yWYJo,9714
95
99
  claude_mpm/cli/commands/tickets.py,sha256=kl2dklTBnG3Y4jUUJ_PcEVsTx4CtVJfkGWboWBx_mQM,21234
96
100
  claude_mpm/cli/commands/uninstall.py,sha256=KGlVG6veEs1efLVjrZ3wSty7e1zVR9wpt-VXQA1RzWw,5945
97
101
  claude_mpm/cli/interactive/__init__.py,sha256=vQqUCgPFvLYA1Vkq-5pnY7Ow3A-IgdM0SByfNL1ZLTk,433
@@ -101,16 +105,17 @@ claude_mpm/cli/parsers/agent_manager_parser.py,sha256=TQEIm638ELM4X_AAGcn6WrJxlt
101
105
  claude_mpm/cli/parsers/agents_parser.py,sha256=R-9ESNXdjqr5iCEIcmbb2EPvcswW9UfJzMj5bAkgI4U,9042
102
106
  claude_mpm/cli/parsers/analyze_code_parser.py,sha256=cpJSMFbc3mqB4qrMBIEZiikzPekC2IQX-cjt9U2fHW4,5356
103
107
  claude_mpm/cli/parsers/analyze_parser.py,sha256=E00Ao0zwzbJPchs_AJt-aoQ7LQEtJPXRCNQ6Piivb4o,3908
104
- claude_mpm/cli/parsers/base_parser.py,sha256=3BAUzITN1bUvJcXYP110zlzt-oURL1pxFzbTMQFuNRU,13647
108
+ claude_mpm/cli/parsers/base_parser.py,sha256=0iz_EzdlUHya2peMdq_R0OifzAeEaEiV5JCBbUSjW1E,14001
105
109
  claude_mpm/cli/parsers/config_parser.py,sha256=wp6NbV8_p9txP28MXFcQrri0JDIfGFM7u4aJbYJXcYQ,2699
106
110
  claude_mpm/cli/parsers/configure_parser.py,sha256=cg3VXrnSqi9QLhMihJXeKDjtp1sS5jSHZNM_prgm0S4,4598
107
111
  claude_mpm/cli/parsers/dashboard_parser.py,sha256=JBCM6v_iZhADr_Fwtk_d3up9AOod1avMab-vkNE61gE,3460
108
112
  claude_mpm/cli/parsers/debug_parser.py,sha256=F7MZdmiXiPfiIPMv21ZUqB2cMT8Ho1LDmpbvCXODLbY,9846
109
- claude_mpm/cli/parsers/mcp_parser.py,sha256=zW4wClYOGf_o8yRediJkQRxgta2RI6S3IG_QDgAkp-k,5992
113
+ claude_mpm/cli/parsers/mcp_parser.py,sha256=xJ3xETj6_f-1_0-ZhkxMcxtjdsHtzbVEOSE95hAZosk,6548
110
114
  claude_mpm/cli/parsers/memory_parser.py,sha256=ZwCDxJEgp-w03L-1tZsWTgisiwamP42s424bA5bvDJc,4760
111
115
  claude_mpm/cli/parsers/monitor_parser.py,sha256=PeoznSi_5Bw6THK_Espl8M20o6dKvvBSmFzAbovkaFQ,4920
112
116
  claude_mpm/cli/parsers/mpm_init_parser.py,sha256=PxAydGDwTmgi0lu-cQHLnk4286EBzK84StcT8Msvk0I,4791
113
- claude_mpm/cli/parsers/run_parser.py,sha256=bkVqtQDl0y0mQi6Ue8mSXNggUuPfXlywgyXLCOPccXg,4750
117
+ claude_mpm/cli/parsers/run_parser.py,sha256=cs34qNonFZG8uYxTYEt0rXi2LcPz3pw8D8hxiywih6w,4927
118
+ claude_mpm/cli/parsers/search_parser.py,sha256=U63DO7ItbwFJhuADtYiaV3zyHrZeag2WdllCGlykOQQ,6876
114
119
  claude_mpm/cli/parsers/tickets_parser.py,sha256=FYl-VNH7PrZzfZUCcjnf6F7g6JXnL8YDxwrmR5svIcg,6966
115
120
  claude_mpm/cli/shared/__init__.py,sha256=c3Ff46Az3U-YpYgcjOowMcNUkSzDngflAJotv6Bs8TE,1019
116
121
  claude_mpm/cli/shared/argument_patterns.py,sha256=unnBuYJA6ZEsHEaMccnyENBgNKqSYzpDdcHGdaseuto,5616
@@ -177,7 +182,7 @@ claude_mpm/core/socketio_pool.py,sha256=8yL4HMA2GWJOkFuOULp1XHE35um06OE-rxA409hT
177
182
  claude_mpm/core/tool_access_control.py,sha256=9PiLGhe7bN9yMIqDPqIVIPUmxKsPwb5PUgcOFSl1QBk,6396
178
183
  claude_mpm/core/types.py,sha256=RQ6MQlV_G3ohLPSdQRRAlQkoCt1BuLK-vnl2JbuFQYA,7835
179
184
  claude_mpm/core/typing_utils.py,sha256=MXPPuTYT6uY-a2T-G8gouoDXn7rRPAqE3xNQ0vP1Lfo,13244
180
- claude_mpm/core/unified_agent_registry.py,sha256=0l5iqZ3zZfritSLWvxiDBc_GCNvRqls_uNQzBmC5Dvw,30014
185
+ claude_mpm/core/unified_agent_registry.py,sha256=oGpzX7HligcymXxOCxhHUY-D33D8CoGxBzWKMvZN0Sw,30321
181
186
  claude_mpm/core/unified_config.py,sha256=MptDUDXv0scgo1zxrGQYg19A0xDHDzPFJPlYeVJPZWA,19659
182
187
  claude_mpm/core/unified_paths.py,sha256=tBb-1QCHDpmXYn1gdget8y-5fVE-vEtS1HWABVBN-J4,35958
183
188
  claude_mpm/core/shared/__init__.py,sha256=1mPHE8qCOAgJPgUZ6bYNO27xhnPN0h9ChHiMcqF1vQc,401
@@ -389,6 +394,7 @@ claude_mpm/services/event_aggregator.py,sha256=859FzkvOKL558Np42A8diVu8Hpa66AhKy
389
394
  claude_mpm/services/exceptions.py,sha256=6l5lXX8j_JhZAgFVs7QoETvsEdzEbByvtAIDbr_JeNY,26439
390
395
  claude_mpm/services/hook_installer_service.py,sha256=UoB3rdN3RTK6VHftEM-x4RtCxs55TBvpDf-auXeLceI,19710
391
396
  claude_mpm/services/hook_service.py,sha256=rZnMn_4qxX5g9KAn0IQdoG50WmySNfsTmfG0XHuRHXk,15737
397
+ claude_mpm/services/mcp_config_manager.py,sha256=XERA_X0GqXAWFLl0tTbQ3qTLSRhm6do8ZFXXjf9bCjU,10000
392
398
  claude_mpm/services/memory_hook_service.py,sha256=pRlTClkRcw30Jhwbha4BC8IMdzKZxF8aWqf52JlntgY,11600
393
399
  claude_mpm/services/monitor_build_service.py,sha256=ggtkHcR7eKOMZjoVEA-1GzNdXhI-sh8z83PJXlozgZM,12141
394
400
  claude_mpm/services/port_manager.py,sha256=CYqLh8Ss_-aoYEXV3G6uZkGexpsRK_XTBL0bV4P3tSI,22838
@@ -410,8 +416,8 @@ claude_mpm/services/agents/deployment/__init__.py,sha256=iprW-Ww3LBtWu9pVFjAX45_
410
416
  claude_mpm/services/agents/deployment/agent_config_provider.py,sha256=gtQcbGr0GspZYplbeRkGXd3BAXl3_pWhKSsbfiSVTww,15234
411
417
  claude_mpm/services/agents/deployment/agent_configuration_manager.py,sha256=5nf69hfo7lUa3_55sDcU5WfpzBtOZCMSTPYGr2dlIdY,12173
412
418
  claude_mpm/services/agents/deployment/agent_definition_factory.py,sha256=DaJ__b3-ADinfd-qNnW6LKWfclOaZbkBBcfuHgqlUic,2697
413
- claude_mpm/services/agents/deployment/agent_deployment.py,sha256=t9jgNN_SXkjWP4YM5FlTdZvbnfXRWYY-vFQuViWLh1s,35636
414
- claude_mpm/services/agents/deployment/agent_discovery_service.py,sha256=v2Sp45N74Orlyg_Gd54oFBxvIzf2wjwSo6yIBlvv3jc,17768
419
+ claude_mpm/services/agents/deployment/agent_deployment.py,sha256=wvguk84DACT32qnPrVM0pvsrFfVoWYz3Zt7Kcb6wwd0,36399
420
+ claude_mpm/services/agents/deployment/agent_discovery_service.py,sha256=1yDjlXdQTsZZtHtHfEJXHlM2QTCxknGOlzMrbupluyY,18433
415
421
  claude_mpm/services/agents/deployment/agent_environment_manager.py,sha256=kjMiLyZYHs-s9pVdtj4av4hJW0gNXnD7lZz2CJpxmZI,9863
416
422
  claude_mpm/services/agents/deployment/agent_filesystem_manager.py,sha256=kstcGvufqF3cmmkJ_hDIHutPbIrMo_ZsGCKlIKmNbMA,12904
417
423
  claude_mpm/services/agents/deployment/agent_format_converter.py,sha256=e27pSOmikIjhvuLIder3ULCtaZpEP9a_01xDHspSCjA,17047
@@ -438,7 +444,7 @@ claude_mpm/services/agents/deployment/interface_adapter.py,sha256=mOsQ5IJHLEezq8
438
444
  claude_mpm/services/agents/deployment/lifecycle_health_checker.py,sha256=2dphAvYRABNlsvi3XfVwS8kvv-YURNEwPBVtCc1g3Zc,3164
439
445
  claude_mpm/services/agents/deployment/lifecycle_performance_tracker.py,sha256=lK_yg0uRL55opUoecOJBL83Tjj6Pu_z4-4EYWPeN6tM,4336
440
446
  claude_mpm/services/agents/deployment/local_template_deployment.py,sha256=VgvmfT8dYaH1KUDMO04EsAQ-XBf_X8u1JlQ_ZGtjDWk,12966
441
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py,sha256=0qyWrYaL7CFi5M8yqVhLgMKnIM8nIctKVjfpnAi4f9A,43332
447
+ claude_mpm/services/agents/deployment/multi_source_deployment_service.py,sha256=ttqOy0_nWIOybQ5_tThuQ7MBfcM0ZviHpv5QNMM8cu4,43491
442
448
  claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py,sha256=5-StpaZYqVvm-WrmLMsoIp85WFYL2p0VLWQOfZEn8jU,11707
443
449
  claude_mpm/services/agents/deployment/single_agent_deployer.py,sha256=6QtHP-y4T_-UXYXYvdQgdIooOfjnC5NArlbkUo4EPl0,11492
444
450
  claude_mpm/services/agents/deployment/system_instructions_deployer.py,sha256=SCBBXleIn322X_w-swOHjO22J3HCxSHGkd3V-rSbbOs,4060
@@ -498,7 +504,7 @@ claude_mpm/services/agents/registry/__init__.py,sha256=ROBX82Ac4iLHEE7-aFUy7mT3N
498
504
  claude_mpm/services/agents/registry/deployed_agent_discovery.py,sha256=aaqu50tjonWURgBWFXUKZvWw9qJYLQgUtCux9xCL1rE,10213
499
505
  claude_mpm/services/agents/registry/modification_tracker.py,sha256=bA4F2chibZCTTK_aUVapuK_z0mYZQ7wOi8-OejjZ0AU,33909
500
506
  claude_mpm/services/cli/__init__.py,sha256=6yavdruQywt9k39RBOrPxUTz6dEEJ6mHzjY4pl_Q3Do,559
501
- claude_mpm/services/cli/agent_cleanup_service.py,sha256=aZd620xKl_ioXOnTRTLLF6L2AnZuAUmC0ia4sr5iJwU,14035
507
+ claude_mpm/services/cli/agent_cleanup_service.py,sha256=7wzbnoASqyEpeUgFMQZkzT8fCF7se23wPJ5feYbFD0E,14288
502
508
  claude_mpm/services/cli/agent_dependency_service.py,sha256=mu6RJIjEe_NrMzil3Wm6CvhQUIZ4pYn8tYpyXDBu2NI,13701
503
509
  claude_mpm/services/cli/agent_listing_service.py,sha256=8lzK7HKF7SsdlwA3DkhtsL6cFlHvbEwFxSkp2V5rYHc,15957
504
510
  claude_mpm/services/cli/agent_output_formatter.py,sha256=FcJ18m3CyeFr_wotJfEmIURHeZ71eomqO_vK7wsPWsM,20521
@@ -588,11 +594,11 @@ claude_mpm/services/infrastructure/monitoring/resources.py,sha256=7Mt9zvNAYGf7OT
588
594
  claude_mpm/services/infrastructure/monitoring/service.py,sha256=guYB6rJtU18T2kPhZbKKg85l96lm2f7XVtPnBt1O3So,12613
589
595
  claude_mpm/services/mcp_gateway/__init__.py,sha256=cRO71-BE1meBbxJgurS9_4NM1cRlcxJ0w0JENFVUW_I,4465
590
596
  claude_mpm/services/mcp_gateway/auto_configure.py,sha256=4Oea5cwzCXMXn216640mEFxZt0FmrbBdvX4DJqdeWek,12040
591
- claude_mpm/services/mcp_gateway/main.py,sha256=D7jZ1hSfo8ovq8xu8lhHvdmUYIU8DpvRWZAsqU2H5Xc,15748
597
+ claude_mpm/services/mcp_gateway/main.py,sha256=IbiJOzBz9txvaRQKcBL8EC_fzvMAzfzeCsW9iCRHMKU,17662
592
598
  claude_mpm/services/mcp_gateway/config/__init__.py,sha256=MpFgHfaT3dQz5QyEdpfbulD6tXUOY325LkovAYsdkAg,386
593
599
  claude_mpm/services/mcp_gateway/config/config_loader.py,sha256=GFijus_iPv63gvQ_HDiQ--C1dzLk_0W9dhGfJpTOylE,9417
594
600
  claude_mpm/services/mcp_gateway/config/config_schema.py,sha256=eSPyHmYJWBpGxJ8l0vBjEGod_PEnbGyHi3fcNLS4mH0,9475
595
- claude_mpm/services/mcp_gateway/config/configuration.py,sha256=lJFfBE-e8UMvUa6bGtJ4mXlARgayvDQyRB8N82I__0o,13393
601
+ claude_mpm/services/mcp_gateway/config/configuration.py,sha256=GQbxhEq9eyIERqmvAtpRxJW6E7pLcqV2LKn8HMVBHeU,13985
596
602
  claude_mpm/services/mcp_gateway/core/__init__.py,sha256=iajLqFBrPixZiFmau3ZXC04mHct2AHNRrwoFMTzskTg,897
597
603
  claude_mpm/services/mcp_gateway/core/base.py,sha256=fcZdZSlgvgH6AMNFdMu-NzmovyHGKxR1m-pvwU9ouEw,10203
598
604
  claude_mpm/services/mcp_gateway/core/exceptions.py,sha256=oRCvGhGgXeqzzybiBz3KNBud5Dn6feBO9MQQUHuqyT0,6795
@@ -610,6 +616,7 @@ claude_mpm/services/mcp_gateway/server/stdio_server.py,sha256=vn0QpJB7i8cINk5M58
610
616
  claude_mpm/services/mcp_gateway/tools/__init__.py,sha256=7_0IpRe7RKJTajajiUCqXxh71gj_P5gSCOMmAjKwVts,530
611
617
  claude_mpm/services/mcp_gateway/tools/base_adapter.py,sha256=Al2uKlW6ZqhDNnIzOA28SyHSDGwLrVS0DrNapAedRww,15851
612
618
  claude_mpm/services/mcp_gateway/tools/document_summarizer.py,sha256=2LdA_bNzVLEUYwUCI5wHK5xpUze0_CDebbGUjv1qtuY,28126
619
+ claude_mpm/services/mcp_gateway/tools/external_mcp_services.py,sha256=EygVZ-mNH9NrFIIvR560EEZjozYQJYkpRP20ZHeNaPg,15377
613
620
  claude_mpm/services/mcp_gateway/tools/health_check_tool.py,sha256=nTgXWGj3JPZzyHHN3cZtWGg8LUk-zFj-jJe5Lpx04d0,16398
614
621
  claude_mpm/services/mcp_gateway/tools/hello_world.py,sha256=Znhr059126wT6sUCda9Ujh7-4ciNODz2z3-DrygOhsM,20197
615
622
  claude_mpm/services/mcp_gateway/tools/ticket_tools.py,sha256=s4AeR5C3vJ18U4ylZZZREHEaMk2i8A3cBEyWvhmlIu8,23161
@@ -716,9 +723,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=9mC9V6ThLUu48OMaYaSHwXnxG8BeH70kv7ys
716
723
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
717
724
  claude_mpm/validation/agent_validator.py,sha256=3Lo6LK-Mw9IdnL_bd3zl_R6FkgSVDYKUUM7EeVVD3jc,20865
718
725
  claude_mpm/validation/frontmatter_validator.py,sha256=u8g4Eyd_9O6ugj7Un47oSGh3kqv4wMkuks2i_CtWRvM,7028
719
- claude_mpm-4.3.11.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
720
- claude_mpm-4.3.11.dist-info/METADATA,sha256=jY6Fakmj5c5E4jufldyQMuDDo6HVYxsO0HWQc_C9ZGc,16041
721
- claude_mpm-4.3.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
722
- claude_mpm-4.3.11.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
723
- claude_mpm-4.3.11.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
724
- claude_mpm-4.3.11.dist-info/RECORD,,
726
+ claude_mpm-4.3.12.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
727
+ claude_mpm-4.3.12.dist-info/METADATA,sha256=wHwGi6xfXekH1BlH6X4eAU-70jTmm-VbPnxneJQAGTU,16150
728
+ claude_mpm-4.3.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
729
+ claude_mpm-4.3.12.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
730
+ claude_mpm-4.3.12.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
731
+ claude_mpm-4.3.12.dist-info/RECORD,,