set-photo-date
Fix incorrect photo dates in the Apple Photos library by setting an absolute date or shifting by seconds. Preview changes with a dry run before applying.
Instructions
Use when: a photo's date/time is wrong and you want to fix it — trailcam or scanner imports stamped with the upload time, a camera with a mis-set clock, scanned prints. Set an absolute date OR shift by a number of seconds (exactly one of date / shiftSeconds). DRY RUN BY DEFAULT: with dryRun omitted (or true) it only reports the current and would-be dates — preview first, then re-run with dryRun=false to write. Returns: uuid, before and after datetimes (on a dry run, after = the would-be date), shiftSeconds (the effective delta), applied, and dryRun. Revert an applied change by re-running with date= and dryRun=false. Do not use when: you want to find photos by date — use query; or you expect the file's EXIF to change — this edits the Photos library date only. Safety: WRITE tool — disabled unless APPLE_PHOTOS_MCP_ENABLE_WRITES=1 (run doctor to check). Rewrites the photo's date in the Photos LIBRARY DATABASE only — the same operation as Photos.app's 'Adjust Date & Time'; the original file's EXIF is never modified. Dates are interpreted in the Mac's local timezone (a timezone-aware ISO datetime is converted to local). Nothing is written unless dryRun=false is passed explicitly, and before/after are always echoed so any change can be reverted. The target photo is validated to exist first. Drives Photos.app via AppleScript (requires macOS Automation permission). Writes target the library currently open in Photos.app.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Absolute new date-time, ISO 8601 (e.g. 2026-05-14T06:32:00), interpreted in the Mac's local timezone unless a UTC offset is included. Exactly one of date / shiftSeconds | |
| uuid | Yes | Photo UUID (hex-with-dashes, as returned by query) | |
| dryRun | No | Default TRUE: preview the before/after dates without writing anything. Pass false to actually write the new date | |
| shiftSeconds | No | Shift the current date by this many seconds (negative = earlier; e.g. -86400 = one day back). Exactly one of date / shiftSeconds |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | No | ||
| after | No | ||
| before | No | ||
| dryRun | No | ||
| applied | No | ||
| shiftSeconds | No |