Fixes found by a full review of the TypeScript surface.
look_at_photosreturned captions and no pictures. The bridge kept only text content parts, so the one tool whose purpose is seeing deleted every image before it reached the caller.- Engine failures were reported as success. The Python returns its errors as an ordinary value, which the protocol marks
isError: false, so a failed export exited 0 with the error on stdout andexport-originals ... && rm ...would carry on. - A crashed engine bricked the session. The dead client stayed cached, so every later call failed with "Connection closed" for the life of the process.
- The engine's stderr was piped and never read, which threw away the real cause of a failure and could block the child once the buffer filled.
- Timeouts were the protocol default of 60s, which a cold
uvrun and any real export both exceed. uv runnow passes--no-project, so it stops trying to sync whatever project the client happened to be started in.--refsaccepts several bare arguments:photo-info uuid1 uuid2used to be an error.- Empty strings reach the engine, so a title or description can be cleared.
whichmaps this library's vocabulary; "save my photos to disk" now answersexport-originalsrather than four browsing tools.- Removed
loginandcapturefrom the command list, and the Midjourney flag aliases and synonyms behind them. None of it existed here. limitcaps at 100 andsizeat 128-2048, matching the engine instead of advertising ceilings it silently clamped.photo_infoandexport_originalssay where they truncate.export_originalsis a read: it copies files out without changing the library, which is why the engine offers it under read-only.doctortold users to setAPPLE_PHOTOS_MCP_LIBRARY, which nothing reads. It isAPPLE_PHOTOS_LIBRARY.- Boolean environment variables are an allowlist on both sides, so
READ_ONLY=enabledcannot mean read-only in one layer and read-write in the other.