mirror of
https://github.com/GH05TCREW/pentestagent.git
synced 2026-03-07 14:23:20 +00:00
mcp: allow background connect without registering tools; TUI starts background connect(register=False)
This commit is contained in:
@@ -1323,8 +1323,20 @@ class PentestAgentTUI(App):
|
||||
from ..mcp import MCPManager
|
||||
|
||||
self.mcp_manager = MCPManager()
|
||||
# connected servers are available synchronously
|
||||
mcp_server_count = len(self.mcp_manager.get_all_servers())
|
||||
# Start background connect without registering tools into the
|
||||
# TUI process and suppress noisy prints. This keeps the MCP
|
||||
# connection and control socket available while keeping the
|
||||
# TUI's tool list unchanged for the operator.
|
||||
try:
|
||||
loop = asyncio.get_running_loop()
|
||||
loop.create_task(self.mcp_manager.connect_all(register=False, quiet=True))
|
||||
except RuntimeError:
|
||||
# No running loop (unlikely in Textual worker), run in thread
|
||||
try:
|
||||
asyncio.run(self.mcp_manager.connect_all(register=False, quiet=True))
|
||||
except Exception:
|
||||
pass
|
||||
mcp_server_count = len(self.mcp_manager.list_configured_servers())
|
||||
except Exception:
|
||||
self.mcp_manager = None
|
||||
mcp_server_count = 0
|
||||
|
||||
@@ -301,7 +301,7 @@ class MCPManager:
|
||||
for n, s in servers.items()
|
||||
]
|
||||
|
||||
async def connect_all(self) -> List[Any]:
|
||||
async def connect_all(self, register: bool = True, quiet: bool = False) -> List[Any]:
|
||||
servers_config = self._load_config()
|
||||
all_tools = []
|
||||
# Connect to any configured servers but DO NOT auto-start vendored adapters.
|
||||
@@ -314,16 +314,18 @@ class MCPManager:
|
||||
self.servers[name] = server
|
||||
for tool_def in server.tools:
|
||||
tool = create_mcp_tool(tool_def, server, self)
|
||||
# Register tool into global registry so it appears in `tools list`
|
||||
try:
|
||||
register_tool_instance(tool)
|
||||
except Exception:
|
||||
pass
|
||||
if register:
|
||||
# Register tool into global registry so it appears in `tools list`
|
||||
try:
|
||||
register_tool_instance(tool)
|
||||
except Exception:
|
||||
pass
|
||||
all_tools.append(tool)
|
||||
print(f"[MCP] Connected to {name} with {len(server.tools)} tools")
|
||||
if not quiet:
|
||||
print(f"[MCP] Connected to {name} with {len(server.tools)} tools")
|
||||
return all_tools
|
||||
|
||||
async def connect_server(self, name: str) -> Optional[MCPServer]:
|
||||
async def connect_server(self, name: str, register: bool = True, quiet: bool = False) -> Optional[MCPServer]:
|
||||
servers_config = self._load_config()
|
||||
if name not in servers_config:
|
||||
return None
|
||||
@@ -369,12 +371,18 @@ class MCPManager:
|
||||
try:
|
||||
for tool_def in server.tools:
|
||||
tool = create_mcp_tool(tool_def, server, self)
|
||||
try:
|
||||
register_tool_instance(tool)
|
||||
except Exception:
|
||||
pass
|
||||
if register:
|
||||
try:
|
||||
register_tool_instance(tool)
|
||||
except Exception:
|
||||
pass
|
||||
except Exception:
|
||||
pass
|
||||
if not quiet:
|
||||
try:
|
||||
print(f"[MCP] Connected to {name} with {len(server.tools)} tools")
|
||||
except Exception:
|
||||
pass
|
||||
return server
|
||||
|
||||
async def _connect_server(self, config: MCPServerConfig) -> Optional[MCPServer]:
|
||||
|
||||
Reference in New Issue
Block a user