Skip to content

Commit 569ff90

Browse files
committed
[gh-392] Remove local server when not in agent mode
1 parent 49c53b2 commit 569ff90

3 files changed

Lines changed: 30 additions & 8 deletions

File tree

cecli/coders/agent_coder.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ def _get_agent_config(self):
165165
config["tools_excludelist"].append("removeskill")
166166

167167
self._initialize_skills_manager(config)
168-
self._initialize_mcp_tools()
169168
return config
170169

171170
def _initialize_skills_manager(self, config):
@@ -203,26 +202,30 @@ def get_local_tool_schemas(self):
203202
schemas.append(tool_module.SCHEMA)
204203
return schemas
205204

206-
async def _initialize_mcp_tools(self):
205+
async def initialize_mcp_tools(self):
207206
if not self.mcp_manager:
208207
self.mcp_manager = McpServerManager()
209208

210209
server_name = "Local"
211210
server = self.mcp_manager.get_server(server_name)
212211

213-
# We have already initialized local server, no need to duplicate work
214-
if server is not None:
212+
# We have already initialized local server and its connected
213+
# then no need to duplicate work
214+
if server is not None and server.is_connected:
215215
return
216216

217217
# If we dont have any tools for local server to use, no point in creating it then
218218
local_tools = self.get_local_tool_schemas()
219219
if not local_tools:
220220
return
221221

222-
local_server_config = {"name": server_name}
223-
local_server = LocalServer(local_server_config)
222+
if server is None:
223+
local_server_config = {"name": server_name}
224+
local_server = LocalServer(local_server_config)
224225

225-
await self.mcp_manager.add_server(local_server, connect=True)
226+
await self.mcp_manager.add_server(local_server, connect=True)
227+
else:
228+
await self.mcp_manager.connect_server(server_name)
226229

227230
async def _execute_local_tool_calls(self, tool_calls_list):
228231
tool_responses = []

cecli/coders/base_coder.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,8 @@ async def create(
255255
# Transfer TUI app weak reference
256256
res.tui = from_coder.tui
257257

258+
await res.initialize_mcp_tools()
259+
258260
res.original_kwargs = dict(kwargs)
259261
return res
260262

@@ -2742,6 +2744,12 @@ async def _execute_all_tool_calls():
27422744

27432745
return tool_responses
27442746

2747+
async def initialize_mcp_tools(self):
2748+
"""
2749+
Any setup that needs to happen for MCP Servers so that coder can use it properly
2750+
"""
2751+
pass
2752+
27452753
@property
27462754
def mcp_tools(self):
27472755
if not self.mcp_manager:

cecli/main.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737

3838
from cecli import __version__, models, urls, utils
3939
from cecli.args import get_parser
40-
from cecli.coders import Coder
40+
from cecli.coders import AgentCoder, Coder
4141
from cecli.coders.base_coder import UnknownEditFormat
4242
from cecli.commands import Commands, SwitchCoderSignal
4343
from cecli.deprecated_args import handle_deprecated_model_args
@@ -1189,17 +1189,28 @@ def apply_model_overrides(model_name):
11891189
return await graceful_exit(coder)
11901190
except SwitchCoderSignal as switch:
11911191
coder.ok_to_warm_cache = False
1192+
11921193
if hasattr(switch, "placeholder") and switch.placeholder is not None:
11931194
io.placeholder = switch.placeholder
11941195
kwargs = dict(io=io, from_coder=coder)
11951196
kwargs.update(switch.kwargs)
1197+
11961198
if "show_announcements" in kwargs:
11971199
del kwargs["show_announcements"]
11981200
kwargs["num_cache_warming_pings"] = 0
11991201
kwargs["args"] = coder.args
1202+
1203+
if kwargs["edit_format"] != AgentCoder.edit_format and (
1204+
coder := kwargs.get("from_coder")
1205+
):
1206+
if coder.mcp_manager.get_server("Local"):
1207+
await coder.mcp_manager.disconnect_server("Local")
1208+
12001209
coder = await Coder.create(**kwargs)
1210+
12011211
if switch.kwargs.get("show_announcements") is False:
12021212
coder.suppress_announcements_for_next_prompt = True
1213+
12031214
except SystemExit:
12041215
sys.settrace(None)
12051216
return await graceful_exit(coder)

0 commit comments

Comments
 (0)