The pieces
The data flow
scanreads tags and populates SQLite. It never writes to your files.select/editbuild playlists in SQLite.syncreads a playlist and writes the iPod database + artwork, copying missing audio.fixis the one path that writes into your library, repairing metadata in place (it never moves or renames files, because Plex reads the same library).
Two surfaces, one core
The CLI and the MCP server are both thin adapters overactions.py:
- CLI: a display adapter (Rich tables, spinners, interactive pickers).
- MCP: an RPC adapter (structured tool results for Claude).
actions.py first, then get a thin wrapper in
each surface. This is why the two never drift apart.
See Design for the deliberate constraints (single-tenant,
Mac-as-source-of-truth) and MCP server for the Claude
integration.
