test_config
Validates your configuration and API connectivity to ensure your media automation setup works correctly.
Instructions
Test the current configuration and API connectivity.
Returns: Configuration status and basic connectivity tests
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/arr_assistant_mcp/main.py:452-497 (handler)The test_config MCP tool handler function that tests configuration and API connectivity for Radarr and Sonarr. Returns a dict with config status (URLs, API key presence) and connectivity test results.
@mcp.tool async def test_config() -> dict[str, Any]: """ Test the current configuration and API connectivity. Returns: Configuration status and basic connectivity tests """ logger.info("Testing configuration...") if not config: return {"error": "No configuration loaded"} status = { "config_loaded": True, "radarr_url": config.radarr_url, "sonarr_url": config.sonarr_url, "radarr_api_key_set": bool(config.radarr_api_key), "sonarr_api_key_set": bool(config.sonarr_api_key), "quality_profile_id": config.quality_profile_id, "radarr_root_folder": config.radarr_root_folder, "sonarr_root_folder": config.sonarr_root_folder } async with MediaServerAPI(config) as api: if config.radarr_api_key: radarr_status = await api.check_radarr_status() status["radarr_connectivity"] = radarr_status["status"] if radarr_status["status"] == "connected": status["radarr_version"] = radarr_status["data"].get("version") else: status["radarr_error"] = radarr_status["message"] else: status["radarr_connectivity"] = "no_api_key" if config.sonarr_api_key: sonarr_status = await api.check_sonarr_status() status["sonarr_connectivity"] = sonarr_status["status"] if sonarr_status["status"] == "connected": status["sonarr_version"] = sonarr_status["data"].get("version") else: status["sonarr_error"] = sonarr_status["message"] else: status["sonarr_connectivity"] = "no_api_key" return status - Helper methods check_radarr_status and check_sonarr_status on MediaServerAPI class, used by test_config to verify API connectivity by calling /api/v3/system/status endpoints.
async def check_radarr_status(self) -> dict[str, Any]: """Check Radarr server status""" url = f"{self.config.radarr_url}/api/v3/system/status" headers = {"X-Api-Key": self.config.radarr_api_key} try: response = await self.client.get(url, headers=headers) response.raise_for_status() return {"status": "connected", "data": response.json()} except Exception as e: return {"status": "error", "message": str(e)} async def check_sonarr_status(self) -> dict[str, Any]: """Check Sonarr server status""" url = f"{self.config.sonarr_url}/api/v3/system/status" headers = {"X-Api-Key": self.config.sonarr_api_key} try: response = await self.client.get(url, headers=headers) response.raise_for_status() return {"status": "connected", "data": response.json()} except Exception as e: return {"status": "error", "message": str(e)} - src/arr_assistant_mcp/main.py:22-34 (schema)ServerConfig dataclass defining the configuration schema (URLs, API keys, quality profile, root folders) that test_config inspects and reports on.
@dataclass class ServerConfig: radarr_url: str radarr_api_key: str sonarr_url: str sonarr_api_key: str quality_profile_id: int = 1 radarr_root_folder: str | None = None sonarr_root_folder: str | None = None def __post_init__(self) -> None: self.radarr_url = self.radarr_url.rstrip("/") self.sonarr_url = self.sonarr_url.rstrip("/") - src/arr_assistant_mcp/main.py:452-452 (registration)The @mcp.tool decorator on line 452 registers test_config as an MCP tool.
@mcp.tool - tests/test_main.py:76-92 (helper)Unit test for test_config that monkeypatches check_radarr_status and check_sonarr_status to verify the tool checks both services and returns correct results.
@pytest.mark.asyncio async def test_test_config_checks_both_services(monkeypatch: pytest.MonkeyPatch) -> None: async def fake_check_radarr(self: MediaServerAPI) -> dict[str, object]: return {"status": "connected", "data": {"version": "5.0.0"}} async def fake_check_sonarr(self: MediaServerAPI) -> dict[str, object]: return {"status": "error", "message": "connection refused"} monkeypatch.setattr(MediaServerAPI, "check_radarr_status", fake_check_radarr) monkeypatch.setattr(MediaServerAPI, "check_sonarr_status", fake_check_sonarr) result = await server_main.test_config() assert result["radarr_connectivity"] == "connected" assert result["radarr_version"] == "5.0.0" assert result["sonarr_connectivity"] == "error" assert result["sonarr_error"] == "connection refused"