"""vault-mcp — the vault's tool surface, served over MCP (docs/V3-PLAN.md §4 P3).

One server process per vault ("the brain", §1.7): every client seat — local or
tailnet-remote — funnels through it, so writes serialize on a process-wide lock
and the server owns git while it runs (commit+push on write, pull-rebase on
interval, superseding the standalone vault-sync tick). Capabilities ship here as
MCP tools, not skills (§1.6): atomic read/write tools on ``vault_core`` plus
agentic tools that run a ``ModelProvider`` loop server-side.

Layout (all app-side — never rendered into a vault):
- :mod:`.seats`    — Bearer → seat resolution (owner + named read-write/read-only seats)
- :mod:`.gitops`   — the one-writer git discipline (lock, atomic writes, sync pass)
- :mod:`.jobs`     — the basic JobManager for long-running agentic tools
- :mod:`.service`  — the per-vault service object the tools operate on
- :mod:`.tools`    — the tool registry (schemas + handlers; progressive disclosure)
- :mod:`.server`   — the streamable-HTTP binding (imports the ``mcp`` extra lazily)
- :mod:`.tailscale`— idempotent Tailscale Serve wiring for tailnet-remote seats

The transport layer (the ``mcp`` SDK, from the ``[mcp]`` extra) is imported only
inside :mod:`.server` — the same lazy posture as the anthropic SDK in
:mod:`alexandria_vault.models` — so everything above it (auth, jail, git, every
tool) runs and tests without the SDK installed.
"""
from .seats import Seat, SeatConfigError  # noqa: F401
from .service import VaultMCPService  # noqa: F401
from .tools import ToolError, call_tool, list_tools  # noqa: F401
