Files
odysseus/tests/test_mcp_reconnect_args.py
Paulo Victor Cordeiro 1f2a06facd fix: MCP reconnect via tool passes only server_id to connect_server (#1385)
* fix: MCP reconnect via tool passes only server_id to connect_server

connect_server requires name, transport, command, args, env, and url
but the reconnect path in do_manage_mcp only passed the server_id,
causing a TypeError on every reconnect attempt. Mirror the pattern
used in mcp_routes.py reconnect_server.

* test: verify MCP reconnect passes full server config to connect_server

Mocks the MCP manager and DB to assert that do_manage_mcp reconnect
passes name, transport, command, args, env, and url — not just the
server_id.
2026-06-03 03:46:07 +09:00

47 lines
1.5 KiB
Python

"""Verify that MCP reconnect via the agent tool passes full server metadata."""
import asyncio
import json
from unittest.mock import AsyncMock, MagicMock, patch
from types import SimpleNamespace
def test_reconnect_passes_full_server_config():
"""do_manage_mcp reconnect must pass name/transport/command/args/env/url."""
from src.tool_implementations import do_manage_mcp
fake_mcp = MagicMock()
fake_mcp.disconnect_server = AsyncMock()
fake_mcp.connect_server = AsyncMock(return_value=True)
fake_mcp.get_server_status = MagicMock(return_value={"tool_count": 3})
fake_srv = SimpleNamespace(
id="srv-123",
name="test-server",
transport="stdio",
command="/usr/bin/test",
args=json.dumps(["--flag"]),
env=json.dumps({"KEY": "val"}),
url=None,
)
fake_db = MagicMock()
fake_db.query.return_value.filter.return_value.first.return_value = fake_srv
with patch("src.tool_implementations.get_mcp_manager", return_value=fake_mcp), \
patch("core.database.SessionLocal", return_value=fake_db):
result = asyncio.run(do_manage_mcp(
json.dumps({"action": "reconnect", "server_id": "srv-123"})
))
assert result["exit_code"] == 0
fake_mcp.connect_server.assert_called_once_with(
server_id="srv-123",
name="test-server",
transport="stdio",
command="/usr/bin/test",
args=["--flag"],
env={"KEY": "val"},
url=None,
)