@thenavidm/apple-photos-mcp-cli 1.1.1 → 2.0.0

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.
Files changed (49) hide show
  1. package/README.md +56 -25
  2. package/SKILL.md +8 -10
  3. package/lib/app.d.ts +14 -0
  4. package/lib/app.js +138 -0
  5. package/lib/app.js.map +1 -0
  6. package/lib/bridge.d.ts +6 -6
  7. package/lib/bridge.js +40 -46
  8. package/lib/bridge.js.map +1 -1
  9. package/lib/config.d.ts +6 -4
  10. package/lib/config.js +19 -25
  11. package/lib/config.js.map +1 -1
  12. package/lib/engine.d.ts +44 -0
  13. package/lib/engine.js +127 -0
  14. package/lib/engine.js.map +1 -0
  15. package/lib/errors.d.ts +0 -3
  16. package/lib/errors.js +0 -3
  17. package/lib/errors.js.map +1 -1
  18. package/lib/index.d.ts +10 -6
  19. package/lib/index.js +17 -104
  20. package/lib/index.js.map +1 -1
  21. package/lib/tools/index.d.ts +20 -11
  22. package/lib/tools/index.js +6 -2
  23. package/lib/tools/index.js.map +1 -1
  24. package/lib/tools/kit.d.ts +26 -24
  25. package/lib/tools/kit.js +68 -44
  26. package/lib/tools/kit.js.map +1 -1
  27. package/lib/version.d.ts +2 -0
  28. package/lib/version.js +4 -0
  29. package/lib/version.js.map +1 -0
  30. package/package.json +3 -4
  31. package/lib/cli.d.ts +0 -105
  32. package/lib/cli.js +0 -644
  33. package/lib/cli.js.map +0 -1
  34. package/lib/safety.d.ts +0 -27
  35. package/lib/safety.js +0 -70
  36. package/lib/safety.js.map +0 -1
  37. package/lib/server.d.ts +0 -10
  38. package/lib/server.js +0 -38
  39. package/lib/server.js.map +0 -1
  40. package/src/apple_photos_mcp/__pycache__/__init__.cpython-313.pyc +0 -0
  41. package/src/apple_photos_mcp/__pycache__/__main__.cpython-313.pyc +0 -0
  42. package/src/apple_photos_mcp/__pycache__/config.cpython-313.pyc +0 -0
  43. package/src/apple_photos_mcp/__pycache__/doctor.cpython-313.pyc +0 -0
  44. package/src/apple_photos_mcp/__pycache__/library.cpython-313.pyc +0 -0
  45. package/src/apple_photos_mcp/__pycache__/previews.cpython-313.pyc +0 -0
  46. package/src/apple_photos_mcp/__pycache__/safety.cpython-313.pyc +0 -0
  47. package/src/apple_photos_mcp/__pycache__/search.cpython-313.pyc +0 -0
  48. package/src/apple_photos_mcp/__pycache__/server.cpython-313.pyc +0 -0
  49. package/src/apple_photos_mcp/__pycache__/writes.cpython-313.pyc +0 -0
package/lib/config.js CHANGED
@@ -6,20 +6,8 @@
6
6
  * only real setting is how to start Python.
7
7
  */
8
8
  import { fileURLToPath } from "node:url";
9
- /**
10
- * An allowlist, matching the engine's own `_flag()`.
11
- *
12
- * A denylist made `APPLE_PHOTOS_READ_ONLY=enabled` mean read-only here and
13
- * read-write in Python. Both sides now agree on what true looks like.
14
- */
15
- function bool(name, fallback) {
16
- const raw = process.env[name];
17
- if (raw === undefined || raw.trim() === "")
18
- return fallback;
19
- return ["1", "true", "yes", "on"].includes(raw.trim().toLowerCase());
20
- }
21
- function int(name, fallback, min, max) {
22
- const raw = process.env[name];
9
+ function int(env, name, fallback, min, max) {
10
+ const raw = env[name];
23
11
  if (raw === undefined || raw.trim() === "")
24
12
  return fallback;
25
13
  const value = Number(raw);
@@ -27,8 +15,8 @@ function int(name, fallback, min, max) {
27
15
  return fallback;
28
16
  return Math.min(Math.max(Math.trunc(value), min), max);
29
17
  }
30
- function str(name) {
31
- const raw = process.env[name];
18
+ function str(env, name) {
19
+ const raw = env[name];
32
20
  return raw && raw.trim() ? raw.trim() : undefined;
33
21
  }
34
22
  /**
@@ -43,10 +31,15 @@ function str(name) {
43
31
  function packagedEnginePath() {
44
32
  return fileURLToPath(new URL("../src", import.meta.url));
45
33
  }
46
- export function loadConfig() {
34
+ /**
35
+ * The settings, read from `env`. Read-only mode, the switch for archiving and
36
+ * the audit log are Slipway's now; the engine reads the same variables itself,
37
+ * from the environment it inherits, and keeps its own guard.
38
+ */
39
+ export function loadConfig(env = process.env) {
47
40
  // `uv run --with ...` needs no virtualenv and caches after the first run, so
48
41
  // a reader with only Node installed still gets a working server.
49
- const explicit = str("APPLE_PHOTOS_PYTHON");
42
+ const explicit = str(env, "APPLE_PHOTOS_PYTHON");
50
43
  const pythonCommand = explicit ?? "uv";
51
44
  const pythonArgs = explicit
52
45
  ? ["-m", "apple_photos_mcp"]
@@ -58,13 +51,14 @@ export function loadConfig() {
58
51
  return {
59
52
  pythonCommand,
60
53
  pythonArgs,
61
- startupTimeoutMs: int("APPLE_PHOTOS_STARTUP_TIMEOUT_MS", 300_000, 10_000, 1_800_000),
62
- requestTimeoutMs: int("APPLE_PHOTOS_REQUEST_TIMEOUT_MS", 300_000, 5_000, 1_800_000),
63
- pythonEnv: { PYTHONPATH: str("APPLE_PHOTOS_PYTHONPATH") ?? packagedEnginePath() },
64
- readOnly: bool("APPLE_PHOTOS_READ_ONLY", false),
65
- allowDestructive: bool("APPLE_PHOTOS_ALLOW_DESTRUCTIVE", true),
66
- auditPath: str("APPLE_PHOTOS_AUDIT_LOG"),
67
- exportDir: str("APPLE_PHOTOS_EXPORT_DIR"),
54
+ startupTimeoutMs: int(env, "APPLE_PHOTOS_STARTUP_TIMEOUT_MS", 300_000, 10_000, 1_800_000),
55
+ requestTimeoutMs: int(env, "APPLE_PHOTOS_REQUEST_TIMEOUT_MS", 300_000, 5_000, 1_800_000),
56
+ // The engine inherits this environment, so it reads the same settings, plus where its package is.
57
+ pythonEnv: {
58
+ ...Object.fromEntries(Object.entries(env).filter(([, value]) => value !== undefined)),
59
+ PYTHONPATH: str(env, "APPLE_PHOTOS_PYTHONPATH") ?? packagedEnginePath(),
60
+ },
61
+ exportDir: str(env, "APPLE_PHOTOS_EXPORT_DIR"),
68
62
  };
69
63
  }
70
64
  /** Every variable the code reads, so --help, the README and the tests agree. */
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src-ts/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src-ts/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAazC,SAAS,GAAG,CAAC,GAAsB,EAAE,IAAY,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW;IAC3F,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,GAAG,CAAC,GAAsB,EAAE,IAAY;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,kBAAkB;IACzB,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,6EAA6E;IAC7E,iEAAiE;IACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,QAAQ,IAAI,IAAI,CAAC;IACvC,MAAM,UAAU,GAAG,QAAQ;QACzB,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC;QAC5B,iEAAiE;QACjE,wEAAwE;QACxE,oEAAoE;QACpE,sCAAsC;QACtC,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAElI,OAAO;QACL,aAAa;QACb,UAAU;QACV,gBAAgB,EAAE,GAAG,CAAC,GAAG,EAAE,iCAAiC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC;QACzF,gBAAgB,EAAE,GAAG,CAAC,GAAG,EAAE,iCAAiC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;QACxF,kGAAkG;QAClG,SAAS,EAAE;YACT,GAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAA4B;YACjH,UAAU,EAAE,GAAG,CAAC,GAAG,EAAE,yBAAyB,CAAC,IAAI,kBAAkB,EAAE;SACxE;QACD,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,yBAAyB,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,qBAAqB;IACrB,yBAAyB;IACzB,iCAAiC;IACjC,iCAAiC;IACjC,wBAAwB;IACxB,gCAAgC;IAChC,wBAAwB;IACxB,yBAAyB;IACzB,0EAA0E;IAC1E,sBAAsB;IACtB,0BAA0B;IAC1B,yBAAyB;IACzB,0BAA0B;IAC1B,8BAA8B;IAC9B,4BAA4B;CACpB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Just enough of an MCP client to talk to the Python engine over stdio.
3
+ *
4
+ * The engine is an MCP server, and this layer only ever starts it, calls a
5
+ * tool and lists its tools. Those are three requests in newline-delimited
6
+ * JSON-RPC, so they need a few dozen lines rather than the MCP SDK's client,
7
+ * whose package brought a web framework and its dependencies along with it.
8
+ *
9
+ * What the engine asks of a client is answered the way the SDK's client would:
10
+ * a ping gets an empty result, and anything else gets "method not found",
11
+ * because this client offers no roots, sampling or forms.
12
+ */
13
+ export type EngineOptions = {
14
+ command: string;
15
+ args: string[];
16
+ env: Record<string, string>;
17
+ clientInfo: {
18
+ name: string;
19
+ version: string;
20
+ };
21
+ /** Each chunk the engine writes to stderr. It must be read, or a chatty engine blocks on a full pipe. */
22
+ onStderr?: (chunk: string) => void;
23
+ /** The engine exited or could not start. */
24
+ onClose?: () => void;
25
+ };
26
+ export declare class StdioEngine {
27
+ private readonly options;
28
+ private child?;
29
+ private buffer;
30
+ private nextId;
31
+ private readonly pending;
32
+ private closed;
33
+ constructor(options: EngineOptions);
34
+ /** Start the engine and complete the handshake, or reject with why it would not start. */
35
+ start(timeoutMs: number): Promise<void>;
36
+ /** One request, answered or failed within `timeoutMs`. A timeout tells the engine to stop. */
37
+ request(method: string, params: Record<string, unknown>, timeoutMs: number): Promise<unknown>;
38
+ /** Stop the engine: closing stdin is how an MCP stdio server is told to go. */
39
+ close(): Promise<void>;
40
+ private send;
41
+ private read;
42
+ private dispatch;
43
+ private fail;
44
+ }
package/lib/engine.js ADDED
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Just enough of an MCP client to talk to the Python engine over stdio.
3
+ *
4
+ * The engine is an MCP server, and this layer only ever starts it, calls a
5
+ * tool and lists its tools. Those are three requests in newline-delimited
6
+ * JSON-RPC, so they need a few dozen lines rather than the MCP SDK's client,
7
+ * whose package brought a web framework and its dependencies along with it.
8
+ *
9
+ * What the engine asks of a client is answered the way the SDK's client would:
10
+ * a ping gets an empty result, and anything else gets "method not found",
11
+ * because this client offers no roots, sampling or forms.
12
+ */
13
+ import { spawn } from "node:child_process";
14
+ /** The protocol revision the engine's Python MCP server speaks. */
15
+ const PROTOCOL = "2025-06-18";
16
+ export class StdioEngine {
17
+ options;
18
+ child;
19
+ buffer = "";
20
+ nextId = 0;
21
+ pending = new Map();
22
+ closed = false;
23
+ constructor(options) {
24
+ this.options = options;
25
+ }
26
+ /** Start the engine and complete the handshake, or reject with why it would not start. */
27
+ async start(timeoutMs) {
28
+ const child = spawn(this.options.command, this.options.args, { env: this.options.env, stdio: ["pipe", "pipe", "pipe"] });
29
+ this.child = child;
30
+ child.stdout.setEncoding("utf8");
31
+ child.stdout.on("data", (chunk) => this.read(chunk));
32
+ child.stderr.on("data", (chunk) => this.options.onStderr?.(chunk.toString()));
33
+ // A missing command arrives as an error event, an engine that dies as an exit;
34
+ // both fail whatever was waiting, so nothing hangs on a process that is gone.
35
+ child.on("error", (error) => this.fail(error));
36
+ child.on("close", (code, signal) => this.fail(new Error(`The engine exited${code === null ? ` on ${signal}` : ` with code ${code}`}.`)));
37
+ // The engine outlives nothing: it goes when this process does.
38
+ process.once("exit", () => this.child?.kill());
39
+ await this.request("initialize", { protocolVersion: PROTOCOL, capabilities: {}, clientInfo: this.options.clientInfo }, timeoutMs);
40
+ this.send({ jsonrpc: "2.0", method: "notifications/initialized" });
41
+ }
42
+ /** One request, answered or failed within `timeoutMs`. A timeout tells the engine to stop. */
43
+ request(method, params, timeoutMs) {
44
+ if (this.closed)
45
+ return Promise.reject(new Error("The engine is not running."));
46
+ const id = ++this.nextId;
47
+ return new Promise((resolve, reject) => {
48
+ const timer = setTimeout(() => {
49
+ this.pending.delete(id);
50
+ this.send({ jsonrpc: "2.0", method: "notifications/cancelled", params: { requestId: id, reason: "timed out" } });
51
+ reject(new Error(`${method} got no answer from the engine within ${Math.round(timeoutMs / 1000)} s.`));
52
+ }, timeoutMs);
53
+ this.pending.set(id, { resolve, reject, timer });
54
+ this.send({ jsonrpc: "2.0", id, method, params });
55
+ });
56
+ }
57
+ /** Stop the engine: closing stdin is how an MCP stdio server is told to go. */
58
+ async close() {
59
+ const child = this.child;
60
+ this.child = undefined;
61
+ if (!child)
62
+ return;
63
+ child.stdin.end();
64
+ const gone = new Promise((resolve) => child.once("close", () => resolve()));
65
+ const grace = setTimeout(() => child.kill(), 2000);
66
+ await gone;
67
+ clearTimeout(grace);
68
+ }
69
+ send(message) {
70
+ if (!this.child?.stdin.writable)
71
+ return;
72
+ this.child.stdin.write(`${JSON.stringify(message)}\n`);
73
+ }
74
+ read(chunk) {
75
+ this.buffer += chunk;
76
+ let newline;
77
+ while ((newline = this.buffer.indexOf("\n")) >= 0) {
78
+ const line = this.buffer.slice(0, newline).trim();
79
+ this.buffer = this.buffer.slice(newline + 1);
80
+ if (!line)
81
+ continue;
82
+ let message;
83
+ try {
84
+ message = JSON.parse(line);
85
+ }
86
+ catch {
87
+ continue; // Not protocol: a stray print from a library. stdout is the engine's to keep clean.
88
+ }
89
+ this.dispatch(message);
90
+ }
91
+ }
92
+ dispatch(message) {
93
+ if (message.method !== undefined) {
94
+ // A request from the engine, which needs an answer; a notification, which does not.
95
+ if (message.id === undefined)
96
+ return;
97
+ if (message.method === "ping")
98
+ this.send({ jsonrpc: "2.0", id: message.id, result: {} });
99
+ else
100
+ this.send({ jsonrpc: "2.0", id: message.id, error: { code: -32601, message: `This client does not answer ${message.method}.` } });
101
+ return;
102
+ }
103
+ if (typeof message.id !== "number")
104
+ return;
105
+ const waiting = this.pending.get(message.id);
106
+ if (!waiting)
107
+ return;
108
+ this.pending.delete(message.id);
109
+ clearTimeout(waiting.timer);
110
+ if (message.error)
111
+ waiting.reject(new Error(message.error.message));
112
+ else
113
+ waiting.resolve(message.result);
114
+ }
115
+ fail(error) {
116
+ if (this.closed)
117
+ return;
118
+ this.closed = true;
119
+ for (const waiting of this.pending.values()) {
120
+ clearTimeout(waiting.timer);
121
+ waiting.reject(error);
122
+ }
123
+ this.pending.clear();
124
+ this.options.onClose?.();
125
+ }
126
+ }
127
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src-ts/engine.ts"],"names":[],"mappings":"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"}
package/lib/errors.d.ts CHANGED
@@ -10,6 +10,3 @@ export declare class BridgeError extends PhotosError {
10
10
  /** The engine ran but refused the request. */
11
11
  export declare class ToolError extends PhotosError {
12
12
  }
13
- /** Writes are off, or a destructive tool was called without confirmation. */
14
- export declare class WriteBlockedError extends PhotosError {
15
- }
package/lib/errors.js CHANGED
@@ -16,7 +16,4 @@ export class BridgeError extends PhotosError {
16
16
  /** The engine ran but refused the request. */
17
17
  export class ToolError extends PhotosError {
18
18
  }
19
- /** Writes are off, or a destructive tool was called without confirmation. */
20
- export class WriteBlockedError extends PhotosError {
21
- }
22
19
  //# sourceMappingURL=errors.js.map
package/lib/errors.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src-ts/errors.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,MAAM,CAAS;IAExB,YAAY,OAAe,EAAE,MAAM,GAAG,EAAE;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACjH,CAAC;CACF;AAED,2EAA2E;AAC3E,MAAM,OAAO,WAAY,SAAQ,WAAW;CAAG;AAE/C,8CAA8C;AAC9C,MAAM,OAAO,SAAU,SAAQ,WAAW;CAAG;AAE7C,6EAA6E;AAC7E,MAAM,OAAO,iBAAkB,SAAQ,WAAW;CAAG"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src-ts/errors.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,MAAM,CAAS;IAExB,YAAY,OAAe,EAAE,MAAM,GAAG,EAAE;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACjH,CAAC;CACF;AAED,2EAA2E;AAC3E,MAAM,OAAO,WAAY,SAAQ,WAAW;CAAG;AAE/C,8CAA8C;AAC9C,MAAM,OAAO,SAAU,SAAQ,WAAW;CAAG"}
package/lib/index.d.ts CHANGED
@@ -1,12 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Entry point.
3
+ * Both binaries. `apple-photos-mcp` with no arguments serves MCP over stdio,
4
+ * which is what an MCP client launches, and any command runs one tool from the
5
+ * shell.
4
6
  *
5
- * `apple-photos-mcp` stdio, which is what MCP clients launch
6
- * `apple-photos-cli <tool>` run one tool from the shell
7
- * `apple-photos-cli doctor` check the setup and say what is wrong
7
+ * This only runs on a Mac, but the package must still install anywhere: the HQ
8
+ * connector imports ALL_TOOLS for its schemas on a Linux builder, never running
9
+ * a tool, and an `"os": ["darwin"]` field would stop npm installing it at all.
10
+ * So it installs anywhere, answers --version and --help anywhere, and refuses
11
+ * everything else off macOS, saying why.
8
12
  *
9
- * The shell surface is generated from the same `ALL_TOOLS` array the server
10
- * registers, so every tool is a command and neither surface can drift.
13
+ * Node's compile cache goes on before the app loads, so every launch after the
14
+ * first skips compiling it again. NODE_DISABLE_COMPILE_CACHE=1 turns it off.
11
15
  */
12
16
  export {};
package/lib/index.js CHANGED
@@ -1,67 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Entry point.
3
+ * Both binaries. `apple-photos-mcp` with no arguments serves MCP over stdio,
4
+ * which is what an MCP client launches, and any command runs one tool from the
5
+ * shell.
4
6
  *
5
- * `apple-photos-mcp` stdio, which is what MCP clients launch
6
- * `apple-photos-cli <tool>` run one tool from the shell
7
- * `apple-photos-cli doctor` check the setup and say what is wrong
7
+ * This only runs on a Mac, but the package must still install anywhere: the HQ
8
+ * connector imports ALL_TOOLS for its schemas on a Linux builder, never running
9
+ * a tool, and an `"os": ["darwin"]` field would stop npm installing it at all.
10
+ * So it installs anywhere, answers --version and --help anywhere, and refuses
11
+ * everything else off macOS, saying why.
8
12
  *
9
- * The shell surface is generated from the same `ALL_TOOLS` array the server
10
- * registers, so every tool is a command and neither surface can drift.
13
+ * Node's compile cache goes on before the app loads, so every launch after the
14
+ * first skips compiling it again. NODE_DISABLE_COMPILE_CACHE=1 turns it off.
11
15
  */
12
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
13
- import { loadConfig } from "./config.js";
14
- import { buildServer, VERSION } from "./server.js";
15
- import { isCliCommand, runCli } from "./cli.js";
16
- const HELP = `apple-photos-mcp ${VERSION}
17
-
18
- apple-photos-mcp Run over stdio. This is what an MCP client launches.
19
- apple-photos-cli tools List every tool as a shell command.
20
- apple-photos-cli <tool> [flags] Run one tool. Same names as the MCP surface.
21
- apple-photos-cli <tool> --help What that tool takes.
22
- apple-photos-cli doctor Check the setup and report what is wrong.
23
- apple-photos-mcp --version Print the version.
24
-
25
- Every command prints JSON on --json, trims it with --select, and reports
26
- errors as JSON on stderr.
27
-
28
- There are no credentials. The library is on this Mac and macOS decides who may
29
- read it; the first run will ask for permission. Nothing is uploaded anywhere.
30
-
31
- Engine:
32
- APPLE_PHOTOS_PYTHON a Python with osxphotos and photoscript.
33
- Defaults to uv, which fetches them on demand.
34
- APPLE_PHOTOS_PYTHONPATH where the engine package lives, default src
35
-
36
- Behaviour:
37
- APPLE_PHOTOS_EXPORT_DIR where export_originals writes by default
38
-
39
- Safety:
40
- APPLE_PHOTOS_READ_ONLY=1 hide everything that is not a read
41
- APPLE_PHOTOS_ALLOW_DESTRUCTIVE=0 keep reads and edits, block archiving
42
- APPLE_PHOTOS_AUDIT_LOG append-only log of every attempted change
43
-
44
- https://github.com/thenavidm/apple-photos-mcp-cli
45
- `;
46
- function invokedAsCli() {
47
- const name = (process.argv[1] ?? "").split("/").pop() ?? "";
48
- return name.startsWith("apple-photos-cli");
49
- }
50
- /**
51
- * This only runs on a Mac, but the package must still install anywhere.
52
- *
53
- * An `"os": ["darwin"]` field in package.json looks right and breaks the thing
54
- * that matters: the HQ connector imports ALL_TOOLS for its schemas on a Linux
55
- * builder, never executing a tool, and npm refuses to install at all. The
56
- * pyproject next door already made this call for the same reason, its comment
57
- * notes that platform markers make `pip install` fail on Linux "instead of
58
- * installing and then telling the user this server needs a Mac".
59
- *
60
- * So: install anywhere, refuse to run anywhere but macOS, and say why.
61
- */
62
- function requireMac() {
63
- if (process.platform === "darwin")
64
- return;
16
+ import * as nodeModule from "node:module";
17
+ nodeModule.enableCompileCache?.();
18
+ const argv = process.argv.slice(2);
19
+ const informational = ["--version", "-v", "--help", "-h"].some((flag) => argv.includes(flag)) || argv[0] === "help";
20
+ if (!informational && process.platform !== "darwin") {
65
21
  process.stderr.write(`${JSON.stringify({
66
22
  error: "Apple Photos only exists on macOS, so this server cannot run on " +
67
23
  `${process.platform}. It installs anywhere because the tool definitions are ` +
@@ -69,49 +25,6 @@ function requireMac() {
69
25
  }, null, 2)}\n`);
70
26
  process.exit(1);
71
27
  }
72
- async function main() {
73
- const argv = process.argv.slice(2);
74
- const command = argv[0];
75
- if (argv.includes("--version") || argv.includes("-v")) {
76
- process.stdout.write(`${VERSION}\n`);
77
- return;
78
- }
79
- if (argv.includes("--help") || argv.includes("-h") || command === "help") {
80
- process.stdout.write(HELP);
81
- return;
82
- }
83
- requireMac();
84
- if (invokedAsCli() && argv.length === 0) {
85
- process.exitCode = await runCli(["tools"]);
86
- return;
87
- }
88
- if (isCliCommand(argv)) {
89
- process.exitCode = await runCli(argv);
90
- return;
91
- }
92
- // Neither binary takes a positional argument that is not a command, so a
93
- // stray word is a typo rather than a reason to sit waiting on stdin.
94
- if (command !== undefined && !command.startsWith("-") && command !== "help") {
95
- process.stderr.write(`${JSON.stringify({ error: `Unknown command '${command}'. Run \`apple-photos-cli\` to list them.` }, null, 2)}\n`);
96
- process.exitCode = 1;
97
- return;
98
- }
99
- if (argv.includes("--help") || argv.includes("-h") || command === "help") {
100
- process.stdout.write(HELP);
101
- return;
102
- }
103
- const built = buildServer(loadConfig());
104
- const transport = new StdioServerTransport();
105
- await built.server.connect(transport);
106
- const shutdown = async () => {
107
- await built.bridge.close();
108
- process.exit(0);
109
- };
110
- process.on("SIGTERM", () => void shutdown());
111
- process.on("SIGINT", () => void shutdown());
112
- }
113
- main().catch((error) => {
114
- process.stderr.write(`[apple-photos-mcp] ${error.message}\n`);
115
- process.exit(1);
116
- });
28
+ const { app } = await import("./app.js");
29
+ await app.main();
117
30
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src-ts/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src-ts/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAE1C,UAAU,CAAC,kBAAkB,EAAE,EAAE,CAAC;AAElC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;AACpH,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;IACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CACf;QACE,KAAK,EACH,kEAAkE;YAClE,GAAG,OAAO,CAAC,QAAQ,0DAA0D;YAC7E,4DAA4D;KAC/D,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CACN,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;AACzC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC"}
@@ -6,12 +6,15 @@
6
6
  * lists agree, so a tool added to Python and forgotten here fails the suite
7
7
  * rather than quietly going missing from the CLI and from HQ.
8
8
  */
9
- import { z } from "zod";
9
+ import { z } from "@thenavidm/slipway";
10
10
  import { type AnyToolSpec } from "./kit.js";
11
11
  export declare const readTools: (import("./kit.js").ToolSpec<{
12
12
  query: z.ZodOptional<z.ZodString>;
13
13
  limit: z.ZodOptional<z.ZodNumber>;
14
- kind: z.ZodOptional<z.ZodEnum<["photo", "video"]>>;
14
+ kind: z.ZodOptional<z.ZodEnum<{
15
+ photo: "photo";
16
+ video: "video";
17
+ }>>;
15
18
  person: z.ZodOptional<z.ZodString>;
16
19
  album: z.ZodOptional<z.ZodString>;
17
20
  place: z.ZodOptional<z.ZodString>;
@@ -19,22 +22,26 @@ export declare const readTools: (import("./kit.js").ToolSpec<{
19
22
  date_from: z.ZodOptional<z.ZodString>;
20
23
  date_to: z.ZodOptional<z.ZodString>;
21
24
  favorites_only: z.ZodOptional<z.ZodBoolean>;
22
- screenshots: z.ZodOptional<z.ZodEnum<["include", "exclude", "only"]>>;
25
+ screenshots: z.ZodOptional<z.ZodEnum<{
26
+ include: "include";
27
+ exclude: "exclude";
28
+ only: "only";
29
+ }>>;
23
30
  include_hidden: z.ZodOptional<z.ZodBoolean>;
24
31
  }> | import("./kit.js").ToolSpec<{
25
- refs: z.ZodArray<z.ZodString, "many">;
32
+ refs: z.ZodArray<z.ZodString>;
26
33
  size: z.ZodOptional<z.ZodNumber>;
27
34
  }> | import("./kit.js").ToolSpec<{
28
- refs: z.ZodArray<z.ZodString, "many">;
35
+ refs: z.ZodArray<z.ZodString>;
29
36
  }> | import("./kit.js").ToolSpec<{}> | import("./kit.js").ToolSpec<{
30
37
  starts_with: z.ZodOptional<z.ZodString>;
31
38
  limit: z.ZodOptional<z.ZodNumber>;
32
39
  }>)[];
33
40
  export declare const writeTools: (import("./kit.js").ToolSpec<{
34
- refs: z.ZodArray<z.ZodString, "many">;
41
+ refs: z.ZodArray<z.ZodString>;
35
42
  directory: z.ZodOptional<z.ZodString>;
36
43
  }> | import("./kit.js").ToolSpec<{
37
- refs: z.ZodArray<z.ZodString, "many">;
44
+ refs: z.ZodArray<z.ZodString>;
38
45
  favorite: z.ZodOptional<z.ZodBoolean>;
39
46
  }> | import("./kit.js").ToolSpec<{
40
47
  ref: z.ZodString;
@@ -43,13 +50,15 @@ export declare const writeTools: (import("./kit.js").ToolSpec<{
43
50
  ref: z.ZodString;
44
51
  description: z.ZodString;
45
52
  }> | import("./kit.js").ToolSpec<{
46
- refs: z.ZodArray<z.ZodString, "many">;
47
- keywords: z.ZodArray<z.ZodString, "many">;
53
+ refs: z.ZodArray<z.ZodString>;
54
+ keywords: z.ZodArray<z.ZodString>;
48
55
  }> | import("./kit.js").ToolSpec<{
49
56
  album: z.ZodString;
50
- refs: z.ZodArray<z.ZodString, "many">;
57
+ refs: z.ZodArray<z.ZodString>;
51
58
  }> | import("./kit.js").ToolSpec<{
52
59
  confirm: z.ZodOptional<z.ZodBoolean>;
53
- refs: z.ZodArray<z.ZodString, "many">;
60
+ refs: z.ZodArray<z.ZodString>;
54
61
  }>)[];
55
62
  export declare const ALL_TOOLS: AnyToolSpec[];
63
+ /** The same tools as Slipway serves them over MCP and as commands. */
64
+ export declare const TOOLS: import("@thenavidm/slipway").Tool<import("./kit.js").ToolContext>[];
@@ -6,8 +6,8 @@
6
6
  * lists agree, so a tool added to Python and forgotten here fails the suite
7
7
  * rather than quietly going missing from the CLI and from HQ.
8
8
  */
9
- import { z } from "zod";
10
- import { confirmArg, defineTool } from "./kit.js";
9
+ import { z } from "@thenavidm/slipway";
10
+ import { confirmArg, defineTool, slipwayTools } from "./kit.js";
11
11
  const REFS = z
12
12
  .array(z.string())
13
13
  .describe("Item refs: Photos uuids from search_photos, or exact filenames like IMG_8402.mov.");
@@ -78,6 +78,8 @@ export const readTools = [
78
78
  }),
79
79
  defineTool({
80
80
  name: "doctor",
81
+ // The CLI's own `doctor` runs these same checks, so the tool answers there as check-setup.
82
+ command: "check-setup",
81
83
  title: "Check the setup",
82
84
  description: "Check that the Photos library is reachable, the engine starts, and this Mac has granted the permissions needed. Run it first when something fails, because a permissions problem and an empty library look identical from a tool call.",
83
85
  schema: {},
@@ -166,4 +168,6 @@ export const writeTools = [
166
168
  }),
167
169
  ];
168
170
  export const ALL_TOOLS = [...readTools, ...writeTools];
171
+ /** The same tools as Slipway serves them over MCP and as commands. */
172
+ export const TOOLS = slipwayTools(ALL_TOOLS);
169
173
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src-ts/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src-ts/tools/index.ts"],"names":[],"mappings":"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"}