"""Per-request MCP context.

The ASGI middleware (mcp/server.py) populates `_user_id_ctx` from
scope['scribe_user_id'] before dispatching to FastMCP tool handlers.
Tool functions then call `current_user_id()` to retrieve it.

Tools must never fall back to a default user — `current_user_id()` raises
if called outside a properly-authed MCP request.
"""
from contextvars import ContextVar

_user_id_ctx: ContextVar[int | None] = ContextVar("scribe_mcp_user_id", default=None)


def current_user_id() -> int:
    """Return the user_id for the in-flight MCP request. Raises if unset."""
    uid = _user_id_ctx.get()
    if uid is None:
        raise RuntimeError("no MCP user context — request was not bearer-authed")
    return uid
