Skip to content

Commit da5e550

Browse files
committed
Update agent coder to use mcp server
1 parent 621b419 commit da5e550

3 files changed

Lines changed: 34 additions & 10 deletions

File tree

cecli/coders/agent_coder.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
normalize_vector,
2323
)
2424
from cecli.helpers.skills import SkillsManager
25-
from cecli.mcp import LocalServer
25+
from cecli.mcp import LocalServer, McpServerManager
2626
from cecli.repo import ANY_GIT_ERROR
2727
from cecli.tools.utils.registry import ToolRegistry
2828

@@ -197,14 +197,17 @@ async def initialize_mcp_tools(self):
197197
local_tools = self.get_local_tool_schemas()
198198
if not local_tools:
199199
return
200+
200201
local_server_config = {"name": server_name}
201202
local_server = LocalServer(local_server_config)
202-
if not self.mcp_servers:
203-
self.mcp_servers = []
204-
if not any(isinstance(s, LocalServer) for s in self.mcp_servers):
205-
self.mcp_servers.append(local_server)
203+
204+
if not self.mcp_manager:
205+
self.mcp_manager = McpServerManager()
206+
if not self.mcp_manager.get_server(server_name):
207+
await self.mcp_manager.add_server(local_server)
206208
if not self.mcp_tools:
207209
self.mcp_tools = []
210+
208211
if server_name not in [name for name, _ in self.mcp_tools]:
209212
self.mcp_tools.append((local_server.name, local_tools))
210213

@@ -245,9 +248,7 @@ async def _execute_local_tool_calls(self, tool_calls_list):
245248
t.get("function", {}).get("name") == norm_tool_name
246249
for t in server_tools
247250
):
248-
server = next(
249-
(s for s in self.mcp_servers if s.name == server_name), None
250-
)
251+
server = self.mcp_manager.get_server(server_name)
251252
if server:
252253
for params in parsed_args_list:
253254
tasks.append(
@@ -943,7 +944,7 @@ async def _execute_tool_with_registry(self, norm_tool_name, params):
943944
if self.mcp_tools:
944945
for server_name, server_tools in self.mcp_tools:
945946
if any(t.get("function", {}).get("name") == norm_tool_name for t in server_tools):
946-
server = next((s for s in self.mcp_servers if s.name == server_name), None)
947+
server = self.mcp_manager.get_server(server_name)
947948
if server:
948949
return await self._execute_mcp_tool(server, norm_tool_name, params)
949950
else:

cecli/mcp/manager.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,30 @@ async def disconnect_server(self, name: str) -> bool:
188188
self._log_warning(f"Error disconnecting from MCP server {name}: {e}")
189189
return False
190190

191+
async def add_server(self, server: McpServer, connect: bool = False) -> bool:
192+
"""
193+
Add a new MCP server to the manager.
194+
195+
Args:
196+
server: McpServer instance to add
197+
connect: Whether to immediately connect to the server
198+
199+
Returns:
200+
Boolean indicating success or failure
201+
"""
202+
existing_server = self.get_server(server.name)
203+
if existing_server:
204+
self._log_warning(f"MCP server with name '{server.name}' already exists")
205+
return False
206+
207+
self._servers.append(server)
208+
self._log_verbose(f"Added MCP server: {server.name}")
209+
210+
if connect:
211+
return await self.connect_server(server.name)
212+
213+
return True
214+
191215
@property
192216
def connected_servers(self) -> list["McpServer"]:
193217
"""Get the list of successfully connected servers."""

tests/basic/test_coder.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1721,7 +1721,6 @@ async def test_process_tool_calls_user_rejects(self):
17211721
# Create coder with mock MCP tools
17221722
coder = await Coder.create(self.GPT35, "diff", io=io, mcp_manager=manager)
17231723
coder.mcp_tools = [("test_server", [{"function": {"name": "test_tool"}}])]
1724-
coder.mcp_servers = [mock_server]
17251724

17261725
# Test process_tool_calls
17271726
result = await coder.process_tool_calls(response)

0 commit comments

Comments
 (0)