Files

1.7 KiB

Immich photo map MCP pattern

Use this when Germaine asks to extract photo metadata from Immich and show where photos were taken.

Immich API endpoints

Relevant stable endpoints:

  • POST /search/metadata with withExif: true to search assets and include EXIF/location data.
  • GET /assets/{id}/metadata to fetch full key-value metadata for a single asset.

/search/metadata can filter by album IDs, taken date, city/state/country, camera make/model, favorite state, asset type, etc.

  • immich_search_geo_assets(taken_after?, taken_before?, album_id?, limit=500) — return assets with latitude/longitude, taken time, filename, city/state/country, camera model, thumbnail URL.
  • immich_get_asset_metadata(asset_id) — return full Immich metadata for one asset.
  • immich_geojson(...) — return a GeoJSON FeatureCollection suitable for Leaflet/MapLibre.
  • immich_map_summary(...) — summarize counts by city/country/date range and count missing-location assets.

Map UI

The MCP should return data; a small UI can live in ops portal or a private subdomain. Use Leaflet + OpenStreetMap tiles + marker clustering. Marker click should show thumbnail, filename, taken date, and location labels.

Security

GPS photo data is sensitive. Keep the MCP localhost-only, store IMMICH_BASE_URL and IMMICH_API_KEY in a chmod 600 .env, and put any map UI behind auth/Cloudflare Access. Prefer thumbnails, not full-resolution assets.

Implementation notes

  • Count missing GPS as missing_location, not an error.
  • Return GeoJSON coordinates as [longitude, latitude].
  • Build read-only first. Metadata update/fix workflows are a later explicit feature.