Claude
Let Claude drive photosuite over MCP, and watch a running delivery for you.
Claude over MCP#
The app answers MCP (Model Context Protocol) on /mcp on the API's port, so Claude Code and Claude Desktop can drive it without writing code. Turn the API on in Settings → General and copy its token.
Claude Code, in the folder you work in:
claude mcp add --transport http photosuite http://127.0.0.1:9100/mcp --header "Authorization: Bearer $CULLING_API_TOKEN"
Claude Desktop starts its tools as programs, so it reaches the app through the mcp-remote bridge. Under Settings → Developer → Edit Config, add photosuite to claude_desktop_config.json, then quit Claude Desktop and open it again:
{
"mcpServers": {
"photosuite": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://127.0.0.1:9100/mcp", "--allow-http", "--header", "Authorization:${AUTH_HEADER}"],
"env": { "AUTH_HEADER": "Bearer <your API token>" }
}
}
}
What it can do: everything the API can, as about thirty tools: one per group of the reference (Navigate, Mark, View, Develop, Metadata, Select & Filter, Files, Deliver, Analyze, App) and kind. …_read tools change nothing, …_change tools change pictures, settings or what is shown, and …_delete tools move to the trash, quarantine, forget or delete. Allow the _read tools and let Claude ask before the others. describe gives an operation's parameters. Pictures (a workflow's delivered pictures, a contact sheet, a screenshot of the window) come back as pictures Claude can look at.
Let Claude watch a delivery#
A Claude Code session can watch a running workflow for you: it is woken when pictures are finished, looks at them, and holds back or runs again a picture that is wrong. It sees a picture after it went out; holding it takes it out of its albums and the delivery folder, and says what is already at a server.
- Start the workflow in Settings → Workflow, with the API on in Settings → General.
- Make a folder for the session, put
follow-workflow.tsfrom the script collection in it, and connect Claude Code to the app there:
claude mcp add --transport http photosuite http://127.0.0.1:9100/mcp --header "Authorization: Bearer $CULLING_API_TOKEN"
- Say what it may do, in
.claude/settings.jsonin that folder: read and steer the workflow, never delete, trash or change a connection.
{
"permissions": {
"allow": [
"mcp__photosuite__workflow_read",
"mcp__photosuite__workflow_change",
"mcp__photosuite__deliver_read",
"mcp__photosuite__describe",
"Bash(bun follow-workflow.ts:*)"
],
"deny": [
"mcp__photosuite__deliver_change",
"mcp__photosuite__files_change",
"mcp__photosuite__analyze_delete",
"mcp__photosuite__app_delete",
"mcp__photosuite__deliver_delete",
"mcp__photosuite__develop_delete",
"mcp__photosuite__files_delete",
"mcp__photosuite__metadata_delete",
"mcp__photosuite__select_filter_delete",
"mcp__photosuite__view_delete",
"mcp__photosuite__workflow_delete"
]
}
}
- Start Claude Code in the folder (
claude) and give it the watch, with what right looks like for this delivery:
Watch the photosuite workflow "Live event". Start
`bun follow-workflow.ts --batch-seconds 300 --workflow "Live event"` under Monitor.
For each batch, look at the contact sheet (workflow_read, GET /api/workflow/files/sheet)
and judge every picture: the swimmer whole with air above the head, level, exposed
like the others. For a wrong one: hold it (POST /api/workflow/files/{id}/hold, by
"claude", with the reason), look at the whole frame (GET /api/workflow/files/{id}/picture
with stage=source), and run it again with a corrected crop or ev
(POST /api/workflow/files/{id}/rerun). Say in one line what you did and why.
Never stop the workflow, and do nothing else.
What it costs. Each wake-up is a turn for the session: about 250 tokens per picture in the batch's line and about 2 700 for a contact sheet of 16, on top of the session's context, which Claude Code mostly reads from its cache (the list of photosuite's tools is about 7 000 tokens). With --batch-seconds 300 a ten-hour day is at most 120 turns; with 0 it is a turn per picture, a few thousand at a busy event. The figures are worked out from the size of the line and the sheet, not read off a bill.
Stop it by asking Claude to stop the Monitor, or by ending the session. The workflow runs on, and held pictures stay held until they are released in Settings → Workflow.
Let Claude approve each picture#
An Approve step looks at each picture before it goes out: Claude sees the picture beside the whole frame it was cut from, with the cut outlined, and passes or fails it against what you write in the step ("the swimmer is whole in the frame, the head and hands not cut, not a frame of an official"). Put it before Add to Album or Export. When Claude fails a picture, the step can hold it back with Claude's reason (it waits in Settings → Workflow until you release it), deliver it marked ("Not approved: …" in its IPTC instructions), or hold it and run it again with the crop Claude proposes. A live delivery never stops for Claude: a picture it does not judge in time goes out, and the app says how many did. It runs on your own Claude key; the step shows what a picture and a thousand pictures cost with the model you choose. The template Live event: FTP → DxO → Claude approves → album has it set up for a swim meet.