
Immich Photo Manager
io.github.drolosoft由 GitHub 帳號 drolosoft 發布v2.0.11更新於 Oct 24, 2026
Photo management for self-hosted Immich: search, albums, duplicates, faces, PDF reports. 94 tools.
概覽
連接自架 Immich 相片庫的 MCP 伺服器,讓助理搜尋相片、整理相簿、去除重複、修復中繼資料並產生 PDF 報告。
- 可以做什麼
- 搜尋與瀏覽相片庫:智慧、中繼資料、地點、城市與隨機搜尋,統計資訊,資產清單
- 管理相簿:列出、建立、更新、刪除相簿,加入或移除相片
- 編輯資產:讀取資訊、批次修改中繼資料、旋轉與還原、地圖標記、反向地理編碼、上傳
- 處理影像與影片:縮圖及批次取得、影片擷取畫面、PDF 匯出與預覽
- 整理人物、人臉、標籤、重複項目、堆疊、時間軸、回憶與資產備註
- 處理分享、共享夥伴、留言、下載、垃圾桶與連線檢查
- 適用情境
- 適合自行架設 Immich、相片庫已大到難以手動管理的人:透過對話建立旅行相簿、修正時間與 GPS、找出重複相片、加上標籤或製作 PDF 相片書。
- 執行需求
- 需要執行中的 Immich 伺服器(v1.90+)與 Immich API 金鑰。設定 IMMICH_BASE_URL 與 IMMICH_API_KEY,或之後用 update_credentials 工具填入。可透過 uvx 在本機執行(需 Python 3.10+),也可用 Docker 映像以 HTTP 在 8626 埠提供服務;經反向代理或其他主機名稱存取時需設定 MCP_ALLOWED_HOSTS。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Immich Photo Manager,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
immich-photo-manager
[CI] [License: MIT] [immich-photo-manager MCP server] [GitHub Release] [Immich] [PyPI]
[Tested live on Immich 2.7.5 and 3.1.0] [364 unit tests on every push] [18 demos from real sessions]
MCP server for intelligent photo management with Immich: your self-hosted library, understood.
An unofficial community plugin by Drolosoft. It is not affiliated with, sponsored by or endorsed by Immich or FUTO; "Immich" is their name and is used here only to say which server the plugin works with. It talks to your Immich server through its public API.
If your Immich library has grown past what you can manage by hand, immich-photo-manager gives any AI assistant direct access to your instance: search, organize, deduplicate, and curate albums through natural conversation. Works with Claude, Gemma, or any MCP-compatible client. Runs locally and talks only to your Immich; your originals stay on your server (see what leaves your network).
Tested, not assumed. Every push runs 364 unit tests on CI. Every release is also run live against real Immich 2.7.5 and 3.1.0 (Docker, all 94 tools over the MCP protocol's legacy era, state re-read after each write) before it is tagged; both protocol eras (the legacy handshake and stateless 2026-07-28) are pinned on every push by SDK-free wire tests (
tests/test_raw_wire_eras.py). The kit is intests/live/, reproducible by anyone. The demos indoc/demos/are transcripts of real sessions, Demo 11 is this exact flow prompt by prompt, and Demo 12 runs the video frames and PDF photobook on a real clip. Demos 13 to 18 cover everything added in 2.x (library discovery, OCR and people search, memories and stacks, partners and downloads, asset notes, the Docker image) from real sessions. Details: How it's tested.
What It Does
Say "create albums for all my trips" and watch it work:
GPS coordinates, CLIP visual search, and temporal matching, combined in one request to create dozens of curated albums. No scripts, no manual sorting.
Quick Start
Prerequisites
- A running Immich instance (self-hosted, v1.90+)
- An Immich API key (how to create one)
- Python 3.10+ with
pip(download)
Install (Claude Code plugin)
The install prints that two options are not set yet: the server URL and the API key. Inside a session, /plugin asks for them in a dialog (the key goes to your system's secure storage); from the shell you can pass them with --config immich_base_url=... --config immich_api_key=..., or leave both empty and let the setup below save them.
Open Claude Code (restart it if it was already open) and connect it to your Immich. Guided:
It asks for your server URL and API key, checks them against the server, saves them, and shows your library numbers:
[/setup-immich-photo-manager: connected, Immich version and library size]
Or skip the guide and say it in one line (same thing underneath):
Either way the credentials are saved for every session from then on; repeat to change server or key. Confirm any time with:
That's the whole install. Claude Desktop, Cowork or another MCP client instead of Claude Code? That is the plain MCP server without the skills: see Getting Started, route B.
Update the plugin
One line, no reinstall:
Then restart Claude Code. drolosoft-marketplace is the name the marketplace gets when you add it from the clone (claude plugin marketplace list shows it). Your saved credentials carry over.
After pulling a new version, run pip3 install -r src/requirements.txt again: 1.7.1 added the video (av) and PDF (fpdf2) libraries to the plugin's dependencies. On the uvx route, uvx --refresh immich-photo-manager --help once, then restart the client.
Upgrading from 2.0.12
Nothing to set up again. The options, the server command and the tool names are the same as in 2.0.12, and saved credentials carry over. What changes:
- The recommended place for the server URL and the API key is the plugin's configuration dialog (
/plugin, then the plugin's options), which keeps the key in your system's secure storage. If you connected through/setup-immich-photo-manager, that keeps working and you do not have to move anything. - The images in the repository were saved again without colour profiles or EXIF data. They look the same.
- The README now lists everything the plugin runs, sends and fetches in one place.
What leaves your network
The plugin process runs on your machine and only talks to your Immich. But everything the assistant reads through it goes to the model you use: filenames, dates, EXIF, album lists, and, when you ask it to look at pictures, thumbnails (250px by default, 1440px previews on request). Originals are never fetched. With Claude that means those thumbnails leave your network; with a local model over MCP (LM Studio, Ollama) nothing does. Nothing is sent unless you ask for it: listing albums or fixing dates moves text only, "tell me what's in these photos" moves images.
A PDF report follows the same rule: export_pdf writes the file to disk on the machine running the server, and it is not sent anywhere unless you pass return_base64=true. The file goes where output_path says (default your Desktop); existing files are never overwritten. Frames that only go into the PDF never leave your machine and cost no tokens; only the frames you ask the model to look at do. When the assets carry GPS, the Places page draws a map with tiles from tile.openstreetmap.org, the only third-party call the server itself makes; pass map=false to skip it and keep everything inside your network.
What the plugin runs, sends and fetches
- Runs: one local process, the MCP server, started as
python3on a file inside the plugin (src/plugin_entry.py). There are no hooks and no background jobs, and nothing is downloaded or installed when it starts. The Python libraries are the ones you install yourself fromsrc/requirements.txt. - Your Immich server: every tool is a call to the public API of the Immich server you configure, with your API key in the
x-api-keyheader.upload_assetsends a local file you name to that server. - Other servers, from the plugin: only
tile.openstreetmap.org, and only when a PDF report draws its Places map. The request carries the tile coordinates of the area, so it tells that server roughly where the photos were taken.map=falseskips it. - Other servers, from the pages it writes: gallery pages load nothing from outside; their handwriting font is embedded in the page. The travel map, served from your own machine, loads Leaflet and two of its add-ons from
unpkg.com, each pinned to one version with anintegrityhash so the browser refuses a changed file, and its map tiles from OpenStreetMap, which shows those two servers the areas you look at. Thumbnails are embedded in the page, or loaded from your own Immich when you set up CORS. - Files on your machine:
export_pdfanddownload_archivewrite where you say and never overwrite. Galleries and maps are HTML files written by the assistant. The duplicate report can read an import folder on disk to compare photos, and it removes files there only when you approve the exact list. - Credentials: entered in the plugin's configuration dialog, the API key is kept in your system's secure storage. Given in conversation (
/setup-immich-photo-managerorupdate_credentials), the key passes through the model like any other message and is saved in two files only your user can read:config.jsonin the plugin's cache folder and~/.immich-photo-manager/config.json. - Public links:
create_shared_linkmakes a link that anyone with the URL can open. It is created only when you ask for sharing;list_shared_linksshows the ones that exist anddelete_shared_linkremoves one. - Deleting:
delete_assetsmoves assets to Immich's trash, whichrestore_assetsundoes. It deletes for good only withforce=true, andempty_trashis permanent too. The cleanup and duplicate skills show what they found and wait for your answer before they delete anything. The plugin never changes Claude's permission settings.
Connect, check, switch: all by talking
You never edit config files after setup. The connection is managed in conversation:
One connection at a time: to work with a second Immich (a test instance, a friend's server), say the update sentence again; say it once more to go back. Wrong URL or key? It tells you, and keeps the previous connection.
Try the full walkthrough: Demo 11, Album Walkthrough. Read an album item by item, find who repeats, create a sub-album, tag and describe every photo.
Works in Claude Code
The same plugin runs in Claude Code: search your library, curate albums, and generate galleries right from the terminal.
Full conversation transcript: Claude Code demo
Works with Any MCP Client
immich-photo-manager is an MCP server: it works with any AI assistant that speaks the Model Context Protocol, not just Claude.
Use the package entry point directly with uvx:
immich-photo-manager defaults to MCP stdio transport. Set MCP_TRANSPORT=http when you want to run the server as a Streamable HTTP service.
🐳 Run as a Docker container
The server also ships as a multi-arch image (amd64 + arm64) on GitHub Container Registry, serving MCP over HTTP on port 8626, both protocol eras, same 94 tools:
Point any Streamable HTTP client at http://localhost:8626/mcp. Liveness is at /health (no credentials needed, wired as the image's HEALTHCHECK). The tools that write files (export_pdf, download_archive) drop them in /data, so mount a volume there. Reaching the container under a name other than localhost (a reverse proxy, another container) needs that name in -e MCP_ALLOWED_HOSTS=.... DNS-rebinding protection stays on.
The env variables are optional: a container started without them still serves, every tool answers "No Immich credentials configured" with the fix, and one update_credentials call (base_url + api_key) connects it, persisted under /data, so with the volume mounted it survives restarts and re-creations.
The same as a Compose service, next to an Immich stack or on its own:
Claude Desktop on macOS: the app does not see your shell's PATH, so write the full path to uvx in "command" (run which uvx in a terminal; typically /Users/<you>/.local/bin/uvx or /opt/homebrew/bin/uvx). Run uvx immich-photo-manager --help once in a terminal so the first download is done, then quit Claude Desktop with Cmd+Q and reopen it. If it still does not show up, the reason is in ~/Library/Logs/Claude/mcp-server-immich.log.
Full transcript: Gemma 4 demo · Test script:
test-lmstudio-mcp.py
Highlights
- AI-powered search: natural language photo search via CLIP ("sunset at the beach", "birthday cake")
- Geographic albums: create albums organized by place, combining GPS + CLIP + temporal matching
- Metadata repair: fix noon/midnight timestamps, infer missing GPS from neighboring photos, correct timezone offsets
- Library cleanup: detect screenshots, duplicates, and low-quality images with multi-signal analysis; near-duplicates and bursts can be stacked behind the best shot instead of deleted, which is reversible
- Duplicate detection: cross-source analysis using perceptual hashing (finds re-encoded copies across Apple Photos, Google Photos, and other imports)
- Bulk rotation: rotate entire albums or selections at once (90°/180°/270°); non-destructive, accumulates across calls, one-click revert
- PDF reports: album or selection to a PDF with metadata, video frames and Claude's captions, built on your machine; the photobook layout gives each chosen video moment a full page with its own caption, and the cover/index/places pages are optional
- Video frames: cut evenly spaced frames out of any clip, or a segment (
start/end) down to one frame per second (interval), so Claude can describe what happens in it; Immich itself keeps one poster per video - People & face management: list, search, merge, and organize recognized people; reassign misidentified faces; view face thumbnails
- Trash & asset lifecycle: safely delete assets to trash, permanently remove, restore from trash; complete asset lifecycle management
- Library health: one command for asset inventory, metadata quality, storage breakdown, and recommendations
- Tags & organization: create, apply, and manage tags across your library; bulk tag and untag assets
- Server-aware: one call reports the Immich version, which features are switched on (OCR, smart search, faces, map) and the known behaviour of that major, so nothing is offered that the server cannot do
- Text inside photos: OCR finds the text in a photo (a ticket, a street sign), and the explore, city and suggestion calls return the exact spellings the filters expect instead of guesses
- Dates in one call: month-by-month buckets, a calendar heatmap that shows gaps and busy days, and Immich's "on this day" memories
- Sharing, both directions: partner libraries (Immich's family sharing) and the comments and likes people leave on a shared album
- Originals out: an album or a selection as one zip on your machine, with the size reported before the download starts
- Notes between sessions: verdicts and actions stored on each asset, so the next cleanup skips what an earlier pass already reviewed
- Runs in Docker: multi-arch image serving MCP over HTTP on port 8626, both protocol eras, same 94 tools
- Interactive galleries: self-contained HTML pages with embedded thumbnails, 3 themes, 4 view modes, and a Cowork Actions Panel for batch operations
[Interactive gallery with Cowork Actions]
Select photos in the gallery, click an action, and paste the command into Claude. See Skills Reference for all 13 skills.
Tools
The 94 tools by area. Parameters, return shapes and examples for each one are in the MCP Tools Reference.
- Search:
search_smart,search_metadata,search_explore,search_cities,search_places,search_suggestions,search_random,search_statistics,search_large_assets,list_assets - Albums:
list_albums,get_album,create_album,update_album,delete_album,add_assets_to_album,remove_assets_from_album - Assets and metadata:
get_asset_info,update_asset_metadata,update_assets_metadata,rotate_assets,revert_asset_edits,get_map_markers,reverse_geocode,upload_asset - Images and thumbnails:
get_asset_image,get_album_images,get_images_batch,get_asset_thumbnail,get_album_thumbnails,get_thumbnails_batch - Video and PDF:
get_video_frames,get_video_frames_json,get_export_preview,export_pdf - People and faces:
list_people,get_person,update_person,merge_people,search_people,get_person_thumbnail,get_asset_faces,reassign_face - Duplicates and stacks:
get_duplicates,resolve_duplicates,create_stack,list_stacks,get_stack,update_stack,delete_stack - Tags:
list_tags,get_tag,create_tag,update_tag,delete_tag,tag_assets,untag_assets - Dates:
get_timeline_buckets,get_timeline_bucket,get_calendar_heatmap,list_memories,create_memory,update_memory,delete_memory - Sharing:
list_shared_links,create_shared_link,get_shared_link,update_shared_link,delete_shared_link,list_users,list_partners,create_partner,update_partner,remove_partner,list_activities,create_activity,delete_activity - Download:
get_download_info,download_archive - Trash:
delete_assets,empty_trash,restore_trash,restore_assets - Asset notes:
review_assets,record_action,get_asset_notes,get_assets_notes,clear_asset_notes - Server and connection:
ping,get_server_version,get_capabilities,get_statistics,get_connection_info,update_credentials
Why immich-photo-manager?
Immich is excellent at storing and viewing your photos. But managing a large library (deduplication, metadata repair, album curation, storage analysis) still requires manual effort or custom scripts.
How it's tested
- Unit suite, every push: 364 pytest cases on Python 3.10 and 3.13 (HTTP mocked), plus ruff. Releases are tagged only when this gate is green.
- Live, every tool, two Immich versions:
tests/live/starts real Immich 2.7.5 and 3.1.0 in Docker, fills them with a small library, and drives all 94 tools over the MCP protocol, re-reading state after each write. Run before every release; last full run 2026-09-03, 132/132 checks on both. - In use: PyPI downloads, merged PRs from four outside contributors, and the demos in
doc/demos/are transcripts of real sessions.
Built with Claude
This is a Claude plugin, and Claude is a collaborator on the code: the design, the API compatibility decisions, and what to test are the author's; a good part of the implementation and the test harness were written with Claude Code. Every change ships through the same gate either way: tests on CI, and for anything touching Immich's API, the live run above.
Documentation
🦙 Glama Score
[immich-photo-manager on Glama]
Contributing
Contributions are welcome: bug fixes, new skills, feature ideas. Open an issue or submit a PR.
If immich-photo-manager helps manage your library, consider giving it a star on GitHub. It helps others discover the project.
Support
If immich-photo-manager saved you time or made your photo library easier to manage, consider buying me a coffee. It keeps the next one coming!
License
MIT License: free to use, modify, and distribute.
Forged by Drolosoft · Tools we wish existed
來源:README.md,提交 22dd582
工具
0版本歷史
1- v2.0.11最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分