From faf9fb9ad7529c50e9fb404957b897b2332fba95 Mon Sep 17 00:00:00 2001 From: Jacob Magar Date: Sun, 15 Mar 2026 23:48:53 -0400 Subject: [PATCH] fix(guards): use Pydantic model for elicitation to get labeled checkbox instead of 'Value: []' --- unraid_mcp/core/guards.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/unraid_mcp/core/guards.py b/unraid_mcp/core/guards.py index c0c929e..97199eb 100644 --- a/unraid_mcp/core/guards.py +++ b/unraid_mcp/core/guards.py @@ -6,6 +6,8 @@ tool action with interactive user confirmation or confirm=True bypass. from typing import TYPE_CHECKING +from pydantic import BaseModel, Field + if TYPE_CHECKING: from fastmcp import Context @@ -14,6 +16,10 @@ from ..config.logging import logger from .exceptions import ToolError +class _ConfirmAction(BaseModel): + confirmed: bool = Field(False, description="Check the box to confirm and proceed") + + async def elicit_destructive_confirmation( ctx: "Context | None", action: str, description: str ) -> bool: @@ -42,7 +48,7 @@ async def elicit_destructive_confirmation( f"{description}\n\n" "Are you sure you want to proceed?" ), - response_type=bool, + response_type=_ConfirmAction, ) except NotImplementedError: logger.warning( @@ -56,7 +62,7 @@ async def elicit_destructive_confirmation( logger.info("Destructive action '%s' declined by user (%s).", action, result.action) return False - confirmed: bool = result.data # type: ignore[union-attr] + confirmed: bool = result.data.confirmed # type: ignore[union-attr] if not confirmed: logger.info("Destructive action '%s' not confirmed by user.", action) return confirmed