@thenavidm/apple-photos-mcp-cli 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -17
- package/SKILL.md +16 -0
- package/package.json +3 -3
- package/pyproject.toml +2 -2
package/README.md
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
<img src="https://cdn.navid.media/connectors/apple-photos-icon.png" alt="Apple Photos" width="88">
|
|
2
2
|
|
|
3
|
-
# Apple Photos MCP
|
|
3
|
+
# Apple Photos MCP + CLI
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/@thenavidm/apple-photos-mcp-cli)
|
|
6
|
+
[](https://github.com/navidmoazzez/apple-photos-mcp-cli)
|
|
6
7
|
[](./LICENSE)
|
|
7
8
|
[](https://youtube.com/@thenavidm?sub_confirmation=1)
|
|
8
9
|
[](https://x.com/thenavidm)
|
|
9
10
|
[](https://linkedin.com/in/thenavidm)
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Apple Photos MCP server and CLI for Claude Code and AI agents. 13 tools to search, look at, organise and export your own library, entirely on your Mac.
|
|
13
|
+
|
|
14
|
+
Give any AI agent real access to your own Apple Photos library, so it can find, see, organise and export your photos instead of guessing.
|
|
12
15
|
|
|
13
16
|
Built and maintained by [Navid Moazzez](https://navid.me?utm_source=github&utm_medium=readme&utm_campaign=apple-photos-mcp).
|
|
14
17
|
|
|
@@ -16,12 +19,54 @@ Built and maintained by [Navid Moazzez](https://navid.me?utm_source=github&utm_m
|
|
|
16
19
|
|
|
17
20
|
Everything runs on your Mac. There is no backend.
|
|
18
21
|
|
|
22
|
+
## Two ways to use it
|
|
23
|
+
|
|
24
|
+
### Command line
|
|
25
|
+
|
|
26
|
+
`apple-photos-cli` in your terminal, for scripting, cron, pipes, or a quick
|
|
27
|
+
question without opening anything:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
apple-photos-cli # every command, one line each
|
|
31
|
+
apple-photos-cli library-stats --json # real totals, one call
|
|
32
|
+
apple-photos-cli search-photos "sunset" --limit 5 --screenshots exclude
|
|
33
|
+
apple-photos-cli photo-info --refs IMG_2073.MOV
|
|
34
|
+
apple-photos-cli export-originals --refs <uuid> --directory ./out
|
|
35
|
+
apple-photos-cli <command> --help # what any command takes
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`--json` gives JSON, `--compact` puts it on one line, `--select total,videos`
|
|
39
|
+
keeps only the fields you name, and errors are JSON on stderr whichever you
|
|
40
|
+
pick. `--confirm` is the shell spelling of the confirmation archiving requires.
|
|
41
|
+
|
|
42
|
+
### MCP server, for AI agents
|
|
43
|
+
|
|
44
|
+
`apple-photos-mcp` is what Claude Code, Claude Desktop, Cursor and the rest
|
|
45
|
+
launch. You never run it by hand:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
claude mcp add apple-photos -- npx -y @thenavidm/apple-photos-mcp-cli@latest
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Then just ask: _"which receipts do I have from Vietnam?"_
|
|
52
|
+
|
|
53
|
+
### Which one
|
|
54
|
+
|
|
55
|
+
| What you are doing | Use |
|
|
56
|
+
|---|---|
|
|
57
|
+
| Inside a conversation with an agent | MCP |
|
|
58
|
+
| Piping, scripting, cron, CI | CLI |
|
|
59
|
+
| A one-off question in a terminal | CLI |
|
|
60
|
+
|
|
61
|
+
They are the same program reading the same tool definitions, so anything one
|
|
62
|
+
can do, the other can. A test asserts they cannot drift.
|
|
63
|
+
|
|
19
64
|
## Contents
|
|
20
65
|
|
|
21
66
|
| | Section | |
|
|
22
67
|
|---|---|---|
|
|
23
68
|
| 1 | [What you can ask it](#1-what-you-can-ask-it-) | Real prompts, not features |
|
|
24
|
-
| 2 | [Quick install](#2-quick-install-) |
|
|
69
|
+
| 2 | [Quick install](#2-quick-install-) | One command, no credential |
|
|
25
70
|
| 3 | [Setup](#3-setup-) | One permission, once |
|
|
26
71
|
| 4 | [Connect your client](#4-connect-your-client-) | Every client, copy and paste |
|
|
27
72
|
| 5 | [Check it worked](#5-check-it-worked-) | `doctor` |
|
|
@@ -49,21 +94,26 @@ The first one is the point. Your library already knows what is in every photo, b
|
|
|
49
94
|
|
|
50
95
|
## 2. Quick install ⚡
|
|
51
96
|
|
|
52
|
-
macOS, and
|
|
53
|
-
|
|
54
|
-
> **Not on PyPI yet.** Install it from GitHub until it is published. The command below works today.
|
|
97
|
+
macOS, and Node 20 or newer.
|
|
55
98
|
|
|
56
99
|
```bash
|
|
57
|
-
|
|
100
|
+
npx -y @thenavidm/apple-photos-mcp-cli@latest --version
|
|
58
101
|
```
|
|
59
102
|
|
|
60
|
-
|
|
103
|
+
That is the whole install. `npx` fetches it on demand, so there is nothing to
|
|
104
|
+
update later.
|
|
105
|
+
|
|
106
|
+
The engine underneath is Python, because `osxphotos` and `photoscript` are the
|
|
107
|
+
only libraries that can read a Photos library and both are Python-only. You do
|
|
108
|
+
not install them: [uv](https://docs.astral.sh/uv/) fetches them on first run and
|
|
109
|
+
caches them. If you do not have uv:
|
|
61
110
|
|
|
62
111
|
```bash
|
|
63
112
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
64
113
|
```
|
|
65
114
|
|
|
66
|
-
|
|
115
|
+
No account, no API key, no credential. macOS will ask for permission the first
|
|
116
|
+
time something reads the library.
|
|
67
117
|
|
|
68
118
|
## 3. Setup 🔑
|
|
69
119
|
|
|
@@ -107,7 +157,7 @@ Set up apple-photos-mcp for me.
|
|
|
107
157
|
|
|
108
158
|
```bash
|
|
109
159
|
claude mcp add apple-photos -s user \
|
|
110
|
-
--
|
|
160
|
+
-- npx -y @thenavidm/apple-photos-mcp-cli@latest
|
|
111
161
|
```
|
|
112
162
|
|
|
113
163
|
`-s user` makes it available in every project rather than just the current one.
|
|
@@ -138,8 +188,8 @@ Apple Photos only exists on macOS, so there is no Windows or Linux path here.
|
|
|
138
188
|
{
|
|
139
189
|
"mcpServers": {
|
|
140
190
|
"apple-photos": {
|
|
141
|
-
"command": "
|
|
142
|
-
"args": ["
|
|
191
|
+
"command": "npx",
|
|
192
|
+
"args": ["-y", "@thenavidm/apple-photos-mcp-cli@latest"]
|
|
143
193
|
}
|
|
144
194
|
}
|
|
145
195
|
}
|
|
@@ -178,7 +228,7 @@ For one project instead of globally, use `.cursor/mcp.json` in that project.
|
|
|
178
228
|
"apple-photos": {
|
|
179
229
|
"type": "stdio",
|
|
180
230
|
"command": "uvx",
|
|
181
|
-
"args": ["--from", "git+https://github.com/navidmoazzez/apple-photos-mcp", "apple-photos-mcp"]
|
|
231
|
+
"args": ["--from", "git+https://github.com/navidmoazzez/apple-photos-mcp-cli", "apple-photos-mcp"]
|
|
182
232
|
}
|
|
183
233
|
}
|
|
184
234
|
}
|
|
@@ -193,7 +243,7 @@ Reload the window: Cmd+Shift+P, then **Developer: Reload Window**.
|
|
|
193
243
|
```toml
|
|
194
244
|
[mcp_servers.apple-photos]
|
|
195
245
|
command = "uvx"
|
|
196
|
-
args = ["--from", "git+https://github.com/navidmoazzez/apple-photos-mcp", "apple-photos-mcp"]
|
|
246
|
+
args = ["--from", "git+https://github.com/navidmoazzez/apple-photos-mcp-cli", "apple-photos-mcp"]
|
|
197
247
|
```
|
|
198
248
|
|
|
199
249
|
### Gemini CLI
|
|
@@ -215,7 +265,7 @@ That relay is not included here. It is a separate deployment with its own hostin
|
|
|
215
265
|
## 5. Check it worked 🩺
|
|
216
266
|
|
|
217
267
|
```bash
|
|
218
|
-
|
|
268
|
+
npx -y @thenavidm/apple-photos-mcp-cli@latest doctor
|
|
219
269
|
```
|
|
220
270
|
|
|
221
271
|
Or just ask your agent: **"run doctor on apple photos"**.
|
|
@@ -448,7 +498,7 @@ Delete the server from your client's config, or run `claude mcp remove apple-pho
|
|
|
448
498
|
|
|
449
499
|
## Questions
|
|
450
500
|
|
|
451
|
-
Run into a problem or have a question? [Open an issue](https://github.com/navidmoazzez/apple-photos-mcp/issues) and I will help.
|
|
501
|
+
Run into a problem or have a question? [Open an issue](https://github.com/navidmoazzez/apple-photos-mcp-cli/issues) and I will help.
|
|
452
502
|
|
|
453
503
|
## About the author
|
|
454
504
|
|
package/SKILL.md
CHANGED
|
@@ -16,6 +16,22 @@ description: >
|
|
|
16
16
|
The library is read directly from disk on this Mac. Nothing is uploaded, and
|
|
17
17
|
nothing here can permanently delete a photo.
|
|
18
18
|
|
|
19
|
+
|
|
20
|
+
## Two surfaces, same tools
|
|
21
|
+
|
|
22
|
+
The MCP server is for work inside a conversation. The CLI is for scripting,
|
|
23
|
+
piping and one-off questions, and costs no context until it is called.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
apple-photos-cli library-stats --json
|
|
27
|
+
apple-photos-cli search-photos "sunset" --limit 5 --screenshots exclude
|
|
28
|
+
apple-photos-cli photo-info --refs IMG_2073.MOV
|
|
29
|
+
apple-photos-cli <command> --help
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The command is the tool name with dashes. `--select total,videos` trims the
|
|
33
|
+
output, which matters on a library this size.
|
|
34
|
+
|
|
19
35
|
## The one thing that matters
|
|
20
36
|
|
|
21
37
|
Search returns candidates. It does not return answers.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thenavidm/apple-photos-mcp-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Apple Photos MCP server and CLI for Claude Code and AI agents. 13 tools to search, look at, organise and export your own Photos library, entirely on your Mac.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"homepage": "https://navid.me",
|
|
32
32
|
"repository": {
|
|
33
33
|
"type": "git",
|
|
34
|
-
"url": "git+https://github.com/navidmoazzez/apple-photos-mcp.git"
|
|
34
|
+
"url": "git+https://github.com/navidmoazzez/apple-photos-mcp-cli.git"
|
|
35
35
|
},
|
|
36
36
|
"bugs": {
|
|
37
|
-
"url": "https://github.com/navidmoazzez/apple-photos-mcp/issues"
|
|
37
|
+
"url": "https://github.com/navidmoazzez/apple-photos-mcp-cli/issues"
|
|
38
38
|
},
|
|
39
39
|
"keywords": [
|
|
40
40
|
"mcp",
|
package/pyproject.toml
CHANGED
|
@@ -33,8 +33,8 @@ dependencies = [
|
|
|
33
33
|
]
|
|
34
34
|
|
|
35
35
|
[project.urls]
|
|
36
|
-
Homepage = "https://github.com/navidmoazzez/apple-photos-mcp"
|
|
37
|
-
Issues = "https://github.com/navidmoazzez/apple-photos-mcp/issues"
|
|
36
|
+
Homepage = "https://github.com/navidmoazzez/apple-photos-mcp-cli"
|
|
37
|
+
Issues = "https://github.com/navidmoazzez/apple-photos-mcp-cli/issues"
|
|
38
38
|
Author = "https://navid.me"
|
|
39
39
|
|
|
40
40
|
[project.scripts]
|