apple-notes-mcp 2.11.0 → 2.13.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.
package/README.md
CHANGED
|
@@ -1950,6 +1950,21 @@ be deleted.
|
|
|
1950
1950
|
|
|
1951
1951
|
**Returns:** `name`, `path`, and `deleted: true`.
|
|
1952
1952
|
|
|
1953
|
+
#### Template editor (command line)
|
|
1954
|
+
|
|
1955
|
+
`apple-notes-mcp templates edit [name]` starts a local web editor for
|
|
1956
|
+
templates: edit the JSON on one side and see it validated and rendered
|
|
1957
|
+
against built-in sample notes on the other, then save it to the library
|
|
1958
|
+
(create-only unless you tick "replace"). It prints one address with a
|
|
1959
|
+
per-run token, listens on `127.0.0.1` only, refuses cross-origin requests,
|
|
1960
|
+
and stops on Ctrl-C or after 30 idle minutes (`--idle-minutes`). It reads a
|
|
1961
|
+
real note only when you pass `--note <id>`, and then read-only. `--tailnet`
|
|
1962
|
+
listens on this Mac's Tailscale address instead, so another device on your
|
|
1963
|
+
tailnet can open it; it never changes Tailscale or firewall settings. With
|
|
1964
|
+
`--tailnet`, `--note` exposes the full note body to anyone who has the URL. See
|
|
1965
|
+
[docs/markdown-templates.md](docs/markdown-templates.md#editing-in-a-browser)
|
|
1966
|
+
for options and exactly what it exposes.
|
|
1967
|
+
|
|
1953
1968
|
---
|
|
1954
1969
|
|
|
1955
1970
|
#### `get-checklist-state`
|
|
@@ -2886,6 +2901,45 @@ Every tool that does not read the Notes database works normally without Full Dis
|
|
|
2886
2901
|
|
|
2887
2902
|
---
|
|
2888
2903
|
|
|
2904
|
+
## Permissions check
|
|
2905
|
+
|
|
2906
|
+
`apple-notes-mcp setup --permissions` checks, in one report, the four grants that decide what the server can do on this Mac:
|
|
2907
|
+
|
|
2908
|
+
| Item | How it is checked | Needed for |
|
|
2909
|
+
|------|-------------------|------------|
|
|
2910
|
+
| Full Disk Access | one read-only `SELECT 1` against `NoteStore.sqlite` | every database-backed tool (see [Full Disk Access](#full-disk-access)) |
|
|
2911
|
+
| Automation of Notes.app | one read-only Apple event (the first account's name), sent only with `--probe-automation` | every AppleScript tool |
|
|
2912
|
+
| Shortcut bridges (optional) | `shortcuts list`, like `setup --check` | the native-write tools |
|
|
2913
|
+
| Speech Recognition (optional) | the public helper's `speech_status`, read without prompting | `transcribe-note-audio` before macOS 26 |
|
|
2914
|
+
|
|
2915
|
+
```bash
|
|
2916
|
+
apple-notes-mcp setup --permissions # report, then press Enter to check again
|
|
2917
|
+
apple-notes-mcp setup --permissions --open # also open the System Settings pane of each missing grant
|
|
2918
|
+
apple-notes-mcp setup --permissions --once # report once and exit (also --json)
|
|
2919
|
+
apple-notes-mcp setup --permissions --probe-automation # also check Automation (sends one Apple event)
|
|
2920
|
+
```
|
|
2921
|
+
|
|
2922
|
+
For each missing grant the report names the System Settings pane and its URL, for example `x-apple.systempreferences:com.apple.settings.PrivacySecurity.extension?Privacy_AllFiles` (the `com.apple.preference.security` form before macOS 13). Panes open only with `--open`, each once per run. The command never changes a setting or a grant: you make the change in System Settings, then press Enter to check again. Type `q` to stop. It exits 1 when a required grant is missing or could not be verified, and 0 otherwise, so a run that did not probe Automation exits 0 if Full Disk Access is granted.
|
|
2923
|
+
|
|
2924
|
+
Automation is the one item that cannot be read without talking to Notes.app, so it is opt-in. By default the command sends no Apple event, and the Automation line reads `unknown` (not probed) with the command that checks it. Add `--probe-automation` to send one read-only event; the first time, macOS may ask whether the app may control Notes, and **Allow** is the only way to add an Automation grant. The probe never runs under `--check` (which reports state only) or when `SSH_CONNECTION` is set, because nobody at the remote shell can answer the prompt. In those cases the line reads `unknown` even if `--probe-automation` was passed. An unprobed Automation line does not change the exit code and the report says Automation was not checked, so run the probe from a terminal on the Mac itself when you need to know. A probe that runs and fails (denied, or no answer) does exit 1.
|
|
2925
|
+
|
|
2926
|
+
macOS attributes these grants to the app that launched the process, so the report names it (for example `/Applications/iTerm.app`). Run the check from the app you use as the MCP host when you can. Claude Desktop launches servers as their own responsible process, so for it use the `doctor` tool inside Claude Desktop, and add the Node binary it names to Full Disk Access. The Speech item reads `unknown` until the [public native helper](#public-native-helper) is built.
|
|
2927
|
+
|
|
2928
|
+
### Optional checklist window
|
|
2929
|
+
|
|
2930
|
+
The same checklist is also available in a small window with **Open Settings** and **Re-check** buttons. Like the public helper, it is built on your Mac from the packaged Swift source, never shipped as a binary:
|
|
2931
|
+
|
|
2932
|
+
```bash
|
|
2933
|
+
apple-notes-mcp setup --permissions-window # compile, ad-hoc sign, verify, install
|
|
2934
|
+
apple-notes-mcp setup --permissions-window --check # report the installed state only
|
|
2935
|
+
apple-notes-mcp setup --permissions --window # open the window
|
|
2936
|
+
apple-notes-mcp setup --permissions --window --probe-automation # the window's checks include Automation
|
|
2937
|
+
```
|
|
2938
|
+
|
|
2939
|
+
Setup compiles `native/permissions-window/apple-notes-permissions-window.swift`, signs it ad hoc, runs its `hello` handshake (which shows no window), and installs it in `~/Library/Application Support/apple-notes-mcp/permissions-window/` with a manifest of source and binary SHA-256 digests; `APPLE_NOTES_MCP_PERMISSIONS_WINDOW_DIR` overrides the folder. The window probes nothing itself. The command runs every check and sends the results to it, and opens a pane only for an item it reported. The window shows an unprobed Automation item as "Not checked", with the command that checks it, and gives it no Open Settings button. If the window is not built, is stale after an upgrade, or was modified, `--window` says so and shows the checklist in the terminal instead. The server never uses the window.
|
|
2940
|
+
|
|
2941
|
+
---
|
|
2942
|
+
|
|
2889
2943
|
## Public native helper
|
|
2890
2944
|
|
|
2891
2945
|
`get-note-drawings` needs Apple's PencilKit framework and `transcribe-note-audio` needs the Speech framework; neither has an AppleScript or command-line interface. For them, the server uses a small Swift helper that links public Apple frameworks only (AppKit, PencilKit, AVFoundation, and Speech). No prebuilt binary ships with the package. Build it once on your Mac:
|
|
@@ -2990,6 +3044,7 @@ In a JSON string literal the two characters `\\` denote **one** literal backslas
|
|
|
2990
3044
|
- macOS needs automation permission
|
|
2991
3045
|
- Go to System Settings > Privacy & Security > Automation
|
|
2992
3046
|
- Ensure your terminal/Claude has permission to control Notes
|
|
3047
|
+
- `apple-notes-mcp setup --permissions --open --probe-automation` checks every grant and opens the pane of each missing one ([Permissions check](#permissions-check))
|
|
2993
3048
|
|
|
2994
3049
|
### Native writes time out or report an uncertain outcome
|
|
2995
3050
|
- Symptom: `add-native-tags`, `set-note-pinned`, `append-native` or another native write fails with "Shortcuts timed out waiting for …", "Operation outcome uncertain" or "readback was not verified", while `doctor` and `get-capabilities` report the bridges installed
|