Source code for ralph.mcp.protocol._access_decision

"""AccessDecision — result of an MCP access decision."""

from __future__ import annotations

from dataclasses import dataclass
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from ralph.mcp.protocol._access_denied_code import AccessDeniedCode


[docs] @dataclass(frozen=True) class AccessDecision: """Result of an MCP access decision.""" allowed: bool reason: str | None = None code: AccessDeniedCode | None = None
[docs] @classmethod def allow(cls) -> AccessDecision: """Build an allow decision.""" return cls(allowed=True)
[docs] @classmethod def deny(cls, reason: str, code: AccessDeniedCode) -> AccessDecision: """Build a deny decision.""" return cls(allowed=False, reason=reason, code=code)
[docs] def is_allowed(self) -> bool: """Return whether access is allowed.""" return self.allowed
__all__ = ["AccessDecision"]