apple-notes-mcp 2.9.23 → 2.9.25

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 (3) hide show
  1. package/README.md +28 -17
  2. package/build/index.js +958 -601
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -261,8 +261,10 @@ Two optional booleans describe a write's outcome when it is known.
261
261
  id before any retry, and never retry blindly. `committed: true` means the write
262
262
  took effect even though its verification failed; `committed: false` means
263
263
  nothing was written (for example a `revision_conflict`). An absent flag means
264
- unknown. Errors the MCP SDK raises itself before a tool runs, such as an
265
- argument that fails the input schema, carry no `structuredContent`.
264
+ unknown. An argument that fails the input schema is rejected before the tool
265
+ runs, with `code: "validation_error"` and `committed: false`. The exception is
266
+ a Notes UUID or numeric key that could not be resolved to an id: it carries
267
+ `not_found`, or `full_disk_access_missing` when the database is unreadable.
266
268
 
267
269
  ### Note Operations
268
270
 
@@ -274,7 +276,7 @@ Creates a new note in Apple Notes.
274
276
  |-----------|------|----------|-------------|
275
277
  | `title` | string | Yes | The title of the note. Automatically prepended as `<h1>` — do NOT include the title in `content` |
276
278
  | `content` | string | One of `content`/`contentPath` | The body content of the note (do not repeat the title here) |
277
- | `contentPath` | string | One of `content`/`contentPath` | Absolute path of a local UTF-8 file to use as the body instead of `content`. Allowed in the same places [`save-attachment`](#save-attachment) may write (home, temp, `/Volumes`); symbolic links, non-regular files, invalid UTF-8 and files over 1 MiB are refused before anything is written. A leading byte-order mark is dropped |
279
+ | `contentPath` | string | One of `content`/`contentPath` | Absolute path of a local UTF-8 file to use as the body instead of `content`. Allowed in the same places [`save-attachment`](#save-attachment) may write (home, temp, `/Volumes`), except hidden paths (any component starting with `.`, such as `~/.ssh` or a project `.env`) and `~/Library` other than iCloud Drive (`~/Library/Mobile Documents`) and cloud storage folders (`~/Library/CloudStorage`), which can hold credentials; set `APPLE_NOTES_MCP_ALLOW_PRIVATE_CONTENT_PATHS=1` to allow those. Symbolic links, non-regular files, invalid UTF-8 and files over 1 MiB are refused before anything is written. A leading byte-order mark is dropped |
278
280
  | `tags` | string[] | No | Returned-only metadata — **NOT written to Notes.app**. Apple Notes tags can't be set via AppleScript, so values passed here are echoed back in the response but do not appear on the created note. Inline `#hashtags` in `content` stay searchable text and are returned as `hashtags`, but they do not become native Notes tags; add real tags afterwards with [`add-native-tags`](#add-native-tags). Refused with `format: "markdown"` |
279
281
  | `folder` | string | No | Folder to create the note in. Supports nested paths like `"Work/Clients"`. **The folder must already exist** — create it first with [`create-folder`](#create-folder). A smart folder is refused (see [`move-note`](#move-note)). Defaults to account root |
280
282
  | `account` | string | No | Account name (defaults to Notes.app's default account; matched exactly or by a *unique* prefix — an ambiguous prefix is refused). Must be an account Notes.app already has configured — see [`list-accounts`](#list-accounts) |
@@ -2104,9 +2106,12 @@ same verification as [`add-attachment`](#add-attachment).
2104
2106
  ```
2105
2107
 
2106
2108
  **Returns:** the new note's `id` with `noteCreated: true` and the
2107
- `add-attachment` result. If the attachment step fails after the note exists,
2108
- the error names the new note's id: attach to it with `add-attachment` instead of
2109
- calling this tool again, which would create a second note.
2109
+ `add-attachment` result. If the attachment step fails after the note exists but
2110
+ before the file is inserted, the error names the new note's id: attach to it
2111
+ with `add-attachment` instead of calling this tool again, which would create a
2112
+ second note. If insertion started and could not be verified, the error is
2113
+ `code: "verification_failed"` with `indeterminate: true`: the file may already
2114
+ be in the note, so read it with `list-attachments` before attaching again.
2110
2115
 
2111
2116
  ---
2112
2117
 
@@ -2419,11 +2424,13 @@ and currently available, with a specific reason for each unavailable operation.
2419
2424
  It also reports `runtimeOS` (`platform`, `macOSVersion` from `sw_vers`,
2420
2425
  `darwinRelease`) and a `features` matrix, one entry per feature group:
2421
2426
  `applescriptCore`, `fullDiskAccessReads`, `shortcutsBridges`,
2422
- `backgroundOperationsBridge`, `nativeTagsBridge`, `markdownNoteBridge`, and the
2423
- placeholders `checklistToggle`, `smartFolders`, `paragraphLinks`, and
2424
- `audioTranscription`, which need a native *write* helper this server does not
2425
- ship (requirement `native_write_helper`). The opt-in private helper below is
2426
- read-only, so enabling it does not change them: they stay `not_implemented`.
2427
+ `backgroundOperationsBridge`, `nativeTagsBridge`, `markdownNoteBridge`,
2428
+ `paragraphLinks` and `audioTranscription` (both database reads that need Full
2429
+ Disk Access), and the placeholders `checklistToggle` and `smartFolders`
2430
+ (creating or editing smart folders), which need a native *write* helper this
2431
+ server does not ship (requirement `native_write_helper`). The opt-in private
2432
+ helper below is read-only, so enabling it does not change them: they stay
2433
+ `not_implemented`.
2427
2434
  Each entry carries `available`, `osSupported`, `minimumMacOSVersion`,
2428
2435
  `requirements`, `missing`, `unverified`, `tools`, and a machine-readable
2429
2436
  `reason` that is `null` when available and otherwise the first that applies:
@@ -2503,12 +2510,15 @@ the note's last checklist items in the requested order.
2503
2510
  }
2504
2511
  ```
2505
2512
 
2506
- **Returns:** `items`, each with its `index`, native `id` and `text`, plus
2507
- `orderVerified` and the new `contentHash`. The first uncertain result stops the
2508
- call without a retry and returns `ok: false` with `landed` (the verified items),
2509
- `stoppedAt` (the item's index, text, `outcome` of `"not-written"` or
2510
- `"uncertain"`, and the error), and `notAttempted`. After an uncertain stop, read
2511
- the note before retrying, and retry only the items that are not present.
2513
+ **Returns:** `items` (also as `landed`), each with its `index`, native `id` and
2514
+ `text`, plus `orderVerified` and the new `contentHash`. The first uncertain
2515
+ result stops the call without a retry and returns `ok: false` with `landed` (the
2516
+ verified items), `stoppedAt` (the item's index, text, `outcome` of
2517
+ `"not-written"` or `"uncertain"`, and the error), and `notAttempted`. Every
2518
+ `ok: false` result is an error result (`isError: true`) with a `code`; after an
2519
+ uncertain stop it has `indeterminate: true` and no `contentHash`, since the note
2520
+ may have changed. Read the note before retrying, and retry only the items that
2521
+ are not present.
2512
2522
 
2513
2523
  #### `create-table`
2514
2524
 
@@ -2765,6 +2775,7 @@ All configuration is optional — the server works out of the box. Override beha
2765
2775
  | `APPLE_NOTES_MCP_BACKGROUND_SHORTCUT` | `Apple Notes MCP - Background Operations v5` | Name or UUID of the installed Background Operations bridge to run. `setup` still installs and checks the default name. |
2766
2776
  | `APPLE_NOTES_MCP_MARKDOWN_SHORTCUT` | `Apple Notes MCP - Create Markdown Note` | Name or UUID of the installed Create Markdown Note bridge to run. `setup` still installs and checks the default name. |
2767
2777
  | `APPLE_NOTES_MCP_PASTEBOARD_NAME` | unset | Testing only: makes [`add-attachment-from-pasteboard`](#add-attachment-from-pasteboard) read a private named pasteboard instead of the general clipboard. |
2778
+ | `APPLE_NOTES_MCP_ALLOW_PRIVATE_CONTENT_PATHS` | unset | Set to `1` to let `create-note` read a [`contentPath`](#create-note) inside a hidden directory or file (such as `~/.config`) or `~/Library` outside iCloud Drive and `~/Library/CloudStorage`. Off by default because those places hold keys, tokens and app data. |
2768
2779
  | `DEBUG` / `VERBOSE` | unset | Set either to enable verbose diagnostic logging to stderr. |
2769
2780
 
2770
2781
  ### Configuration file (when the host strips `env`)