From 83df7681355671f13d20f91921f6b9a87cadd4fe Mon Sep 17 00:00:00 2001 From: Jacob Magar Date: Sun, 15 Mar 2026 21:58:56 -0400 Subject: [PATCH] fix(notifications): remove warnings action (warningsAndAlerts not in live API) --- tests/test_notifications.py | 16 ++++++++-------- unraid_mcp/tools/notifications.py | 16 +--------------- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/tests/test_notifications.py b/tests/test_notifications.py index 0933d7a..70aec8d 100644 --- a/tests/test_notifications.py +++ b/tests/test_notifications.py @@ -1,12 +1,20 @@ """Tests for unraid_notifications tool.""" from collections.abc import Generator +from typing import get_args from unittest.mock import AsyncMock, patch import pytest from conftest import make_tool_fn from unraid_mcp.core.exceptions import ToolError +from unraid_mcp.tools.notifications import NOTIFICATION_ACTIONS + + +def test_warnings_action_removed() -> None: + assert "warnings" not in get_args(NOTIFICATION_ACTIONS), ( + "warnings action references warningsAndAlerts which is not in live API" + ) @pytest.fixture @@ -72,14 +80,6 @@ class TestNotificationsActions: result = await tool_fn(action="list") assert len(result["notifications"]) == 1 - async def test_warnings(self, _mock_graphql: AsyncMock) -> None: - _mock_graphql.return_value = { - "notifications": {"warningsAndAlerts": [{"id": "n:1", "importance": "WARNING"}]} - } - tool_fn = _make_tool() - result = await tool_fn(action="warnings") - assert len(result["warnings"]) == 1 - async def test_create(self, _mock_graphql: AsyncMock) -> None: _mock_graphql.return_value = { "createNotification": {"id": "n:new", "title": "Test", "importance": "INFO"} diff --git a/unraid_mcp/tools/notifications.py b/unraid_mcp/tools/notifications.py index fa933de..82051c5 100644 --- a/unraid_mcp/tools/notifications.py +++ b/unraid_mcp/tools/notifications.py @@ -1,6 +1,6 @@ """Notification management. -Provides the `unraid_notifications` tool with 9 actions for viewing, +Provides the `unraid_notifications` tool with 13 actions for viewing, creating, archiving, and deleting system notifications. """ @@ -33,13 +33,6 @@ QUERIES: dict[str, str] = { } } """, - "warnings": """ - query GetWarningsAndAlerts { - notifications { - warningsAndAlerts { id title subject description importance type timestamp } - } - } - """, } MUTATIONS: dict[str, str] = { @@ -128,7 +121,6 @@ _VALID_IMPORTANCE = {"ALERT", "WARNING", "INFO"} NOTIFICATION_ACTIONS = Literal[ "overview", "list", - "warnings", "create", "archive", "unread", @@ -174,7 +166,6 @@ def register_notifications_tool(mcp: FastMCP) -> None: Actions: overview - Notification counts by severity (unread/archive) list - List notifications with filtering (list_type=UNREAD/ARCHIVE, importance=INFO/WARNING/ALERT) - warnings - Get deduplicated unread warnings and alerts create - Create notification (requires title, subject, description, importance) archive - Archive a notification (requires notification_id) unread - Mark notification as unread (requires notification_id) @@ -233,11 +224,6 @@ def register_notifications_tool(mcp: FastMCP) -> None: notifications = data.get("notifications", {}) return {"notifications": notifications.get("list", [])} - if action == "warnings": - data = await make_graphql_request(QUERIES["warnings"]) - notifications = data.get("notifications", {}) - return {"warnings": notifications.get("warningsAndAlerts", [])} - if action == "create": if title is None or subject is None or description is None or importance is None: raise ToolError("create requires title, subject, description, and importance")