sidequest_common.models.mcp =========================== .. py:module:: sidequest_common.models.mcp .. autoapi-nested-parse:: MCP (Model Context Protocol) officer access tokens. Classes ------- .. autoapisummary:: sidequest_common.models.mcp.McpToken Module Contents --------------- .. py:class:: McpToken Bases: :py:obj:`advanced_alchemy.base.UUIDAuditBase` A long-lived bearer token for an officer's personal MCP client (Claude Code, omp), scoped to one member. ``token_hash`` is the sha256 hex digest of the token (format ``sqm_`` + 40 url-safe chars); the plaintext is shown to the officer once, at creation, and never stored. Every MCP request accepts the token only while its member still holds an officer role, checked at request time (not cached on the row), mirroring ``EpgpSyncToken``. .. py:attribute:: last_used_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: member_id :type: sqlalchemy.orm.Mapped[int] .. py:attribute:: name :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: revoked_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: token_hash :type: sqlalchemy.orm.Mapped[str]