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"]