apple-notes-mcp 1.2.1 → 1.2.17

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
@@ -85,6 +85,12 @@ On first use, macOS will ask for permission to automate Notes.app. Click "OK" to
85
85
  | **Move Notes** | Organize notes into folders |
86
86
  | **Folder Management** | Create, list, and delete folders |
87
87
  | **Multi-Account** | Work with iCloud, Gmail, Exchange, or any configured account |
88
+ | **Batch Operations** | Delete or move multiple notes at once |
89
+ | **Export** | Export all notes as JSON or get individual notes as Markdown |
90
+ | **Attachments** | List attachments in notes |
91
+ | **Sync Awareness** | Detect iCloud sync in progress, warn about incomplete results |
92
+ | **Collaboration** | Detect shared notes, warn before modifying |
93
+ | **Diagnostics** | Health check, sync status, and statistics tools |
88
94
 
89
95
  ---
90
96
 
@@ -113,7 +119,7 @@ Creates a new note in Apple Notes.
113
119
  }
114
120
  ```
115
121
 
116
- **Returns:** Confirmation message with note title, or error if creation failed.
122
+ **Returns:** Confirmation message with note title and ID. Save the ID for subsequent operations like `update-note`, `delete-note`, etc.
117
123
 
118
124
  ---
119
125
 
@@ -142,7 +148,7 @@ Searches for notes by title or content.
142
148
  }
143
149
  ```
144
150
 
145
- **Returns:** List of matching note titles, or message if no matches found.
151
+ **Returns:** List of matching notes with titles, folder names, and IDs. Use the returned ID for subsequent operations like `get-note-content`, `update-note`, etc.
146
152
 
147
153
  ---
148
154
 
@@ -152,10 +158,20 @@ Retrieves the full content of a specific note.
152
158
 
153
159
  | Parameter | Type | Required | Description |
154
160
  |-----------|------|----------|-------------|
155
- | `title` | string | Yes | Exact title of the note to retrieve |
156
- | `account` | string | No | Account containing the note (defaults to iCloud) |
161
+ | `id` | string | No | Note ID (preferred - more reliable than title) |
162
+ | `title` | string | No | Note title (use `id` instead when available) |
163
+ | `account` | string | No | Account containing the note (defaults to iCloud, ignored if `id` is provided) |
157
164
 
158
- **Example:**
165
+ **Note:** Either `id` or `title` must be provided. Using `id` is recommended as it's unique and avoids issues with duplicate titles.
166
+
167
+ **Example - Using ID (recommended):**
168
+ ```json
169
+ {
170
+ "id": "x-coredata://ABC123/ICNote/p456"
171
+ }
172
+ ```
173
+
174
+ **Example - Using title:**
159
175
  ```json
160
176
  {
161
177
  "title": "Shopping List"
@@ -215,10 +231,21 @@ Updates an existing note's content and/or title.
215
231
 
216
232
  | Parameter | Type | Required | Description |
217
233
  |-----------|------|----------|-------------|
218
- | `title` | string | Yes | Current title of the note to update |
234
+ | `id` | string | No | Note ID (preferred - more reliable than title) |
235
+ | `title` | string | No | Current title of the note to update (use `id` instead when available) |
219
236
  | `newTitle` | string | No | New title (if changing the title) |
220
237
  | `newContent` | string | Yes | New content for the note body |
221
- | `account` | string | No | Account containing the note (defaults to iCloud) |
238
+ | `account` | string | No | Account containing the note (defaults to iCloud, ignored if `id` is provided) |
239
+
240
+ **Note:** Either `id` or `title` must be provided. Using `id` is recommended.
241
+
242
+ **Example - Using ID (recommended):**
243
+ ```json
244
+ {
245
+ "id": "x-coredata://ABC123/ICNote/p456",
246
+ "newContent": "Updated content here"
247
+ }
248
+ ```
222
249
 
223
250
  **Example - Update content only:**
224
251
  ```json
@@ -247,10 +274,20 @@ Deletes a note (moves to Recently Deleted in Notes.app).
247
274
 
248
275
  | Parameter | Type | Required | Description |
249
276
  |-----------|------|----------|-------------|
250
- | `title` | string | Yes | Exact title of the note to delete |
251
- | `account` | string | No | Account containing the note (defaults to iCloud) |
277
+ | `id` | string | No | Note ID (preferred - more reliable than title) |
278
+ | `title` | string | No | Exact title of the note to delete (use `id` instead when available) |
279
+ | `account` | string | No | Account containing the note (defaults to iCloud, ignored if `id` is provided) |
252
280
 
253
- **Example:**
281
+ **Note:** Either `id` or `title` must be provided. Using `id` is recommended.
282
+
283
+ **Example - Using ID (recommended):**
284
+ ```json
285
+ {
286
+ "id": "x-coredata://ABC123/ICNote/p456"
287
+ }
288
+ ```
289
+
290
+ **Example - Using title:**
254
291
  ```json
255
292
  {
256
293
  "title": "Old Draft"
@@ -267,11 +304,22 @@ Moves a note to a different folder.
267
304
 
268
305
  | Parameter | Type | Required | Description |
269
306
  |-----------|------|----------|-------------|
270
- | `title` | string | Yes | Title of the note to move |
307
+ | `id` | string | No | Note ID (preferred - more reliable than title) |
308
+ | `title` | string | No | Title of the note to move (use `id` instead when available) |
271
309
  | `folder` | string | Yes | Name of the destination folder |
272
- | `account` | string | No | Account containing the note (defaults to iCloud) |
310
+ | `account` | string | No | Account containing the note (defaults to iCloud, ignored if `id` is provided) |
273
311
 
274
- **Example:**
312
+ **Note:** Either `id` or `title` must be provided. Using `id` is recommended.
313
+
314
+ **Example - Using ID (recommended):**
315
+ ```json
316
+ {
317
+ "id": "x-coredata://ABC123/ICNote/p456",
318
+ "folder": "Archive"
319
+ }
320
+ ```
321
+
322
+ **Example - Using title:**
275
323
  ```json
276
324
  {
277
325
  "title": "Completed Task",
@@ -386,6 +434,116 @@ Lists all configured Notes accounts.
386
434
 
387
435
  ---
388
436
 
437
+ ### Batch Operations
438
+
439
+ #### `batch-delete-notes`
440
+
441
+ Deletes multiple notes at once by ID.
442
+
443
+ | Parameter | Type | Required | Description |
444
+ |-----------|------|----------|-------------|
445
+ | `ids` | string[] | Yes | Array of note IDs to delete |
446
+
447
+ **Returns:** Summary of successes and failures.
448
+
449
+ ---
450
+
451
+ #### `batch-move-notes`
452
+
453
+ Moves multiple notes to a folder.
454
+
455
+ | Parameter | Type | Required | Description |
456
+ |-----------|------|----------|-------------|
457
+ | `ids` | string[] | Yes | Array of note IDs to move |
458
+ | `folder` | string | Yes | Destination folder name |
459
+ | `account` | string | No | Account containing the folder |
460
+
461
+ **Returns:** Summary of successes and failures.
462
+
463
+ ---
464
+
465
+ ### Export Operations
466
+
467
+ #### `export-notes-json`
468
+
469
+ Exports all notes as a JSON structure.
470
+
471
+ **Parameters:** None
472
+
473
+ **Returns:** Complete JSON export with all accounts, folders, and notes including metadata.
474
+
475
+ ---
476
+
477
+ #### `get-note-markdown`
478
+
479
+ Gets a note's content as Markdown instead of HTML.
480
+
481
+ | Parameter | Type | Required | Description |
482
+ |-----------|------|----------|-------------|
483
+ | `id` | string | No | Note ID (preferred) |
484
+ | `title` | string | No | Note title |
485
+ | `account` | string | No | Account containing the note |
486
+
487
+ **Returns:** Note content converted to Markdown format.
488
+
489
+ ---
490
+
491
+ #### `list-attachments`
492
+
493
+ Lists attachments in a note.
494
+
495
+ | Parameter | Type | Required | Description |
496
+ |-----------|------|----------|-------------|
497
+ | `id` | string | No | Note ID (preferred) |
498
+ | `title` | string | No | Note title |
499
+ | `account` | string | No | Account containing the note |
500
+
501
+ **Returns:** List of attachments with names and content types.
502
+
503
+ ---
504
+
505
+ ### Diagnostics
506
+
507
+ #### `health-check`
508
+
509
+ Verifies Notes.app connectivity and permissions.
510
+
511
+ **Parameters:** None
512
+
513
+ **Returns:** Status of all health checks (app installed, permissions, account access).
514
+
515
+ ---
516
+
517
+ #### `get-notes-stats`
518
+
519
+ Gets comprehensive statistics about your notes.
520
+
521
+ **Parameters:** None
522
+
523
+ **Returns:** Total counts, per-account breakdown, folder statistics, and recently modified counts.
524
+
525
+ ---
526
+
527
+ #### `get-sync-status`
528
+
529
+ Checks iCloud sync status.
530
+
531
+ **Parameters:** None
532
+
533
+ **Returns:** Whether sync is active, pending uploads, and last activity time.
534
+
535
+ ---
536
+
537
+ #### `list-shared-notes`
538
+
539
+ Lists all notes shared with collaborators.
540
+
541
+ **Parameters:** None
542
+
543
+ **Returns:** List of shared notes with warnings about collaboration.
544
+
545
+ ---
546
+
389
547
  ## Usage Patterns
390
548
 
391
549
  ### Basic Workflow
@@ -443,8 +601,8 @@ npm install -g apple-notes-mcp
443
601
  ### From Source
444
602
 
445
603
  ```bash
446
- git clone https://github.com/sweetrb/mcp-apple-notes.git
447
- cd mcp-apple-notes
604
+ git clone https://github.com/sweetrb/apple-notes-mcp.git
605
+ cd apple-notes-mcp
448
606
  npm install
449
607
  npm run build
450
608
  ```
@@ -455,7 +613,7 @@ If installed from source, use this configuration:
455
613
  "mcpServers": {
456
614
  "apple-notes": {
457
615
  "command": "node",
458
- "args": ["/path/to/mcp-apple-notes/build/index.js"]
616
+ "args": ["/path/to/apple-notes-mcp/build/index.js"]
459
617
  }
460
618
  }
461
619
  }
@@ -477,7 +635,7 @@ If installed from source, use this configuration:
477
635
  | Limitation | Reason |
478
636
  |------------|--------|
479
637
  | macOS only | Apple Notes and AppleScript are macOS-specific |
480
- | No attachments | AppleScript cannot access note attachments |
638
+ | No attachment content | Attachments can be listed but not downloaded via AppleScript |
481
639
  | No pinned notes | Pin status is not exposed via AppleScript |
482
640
  | No rich formatting | Content is HTML; complex formatting may not render |
483
641
  | Title matching | Most operations require exact title matches |
@@ -536,7 +694,7 @@ The `\\\\` in JSON becomes `\\` in the actual string, which represents a single
536
694
  ```bash
537
695
  npm install # Install dependencies
538
696
  npm run build # Compile TypeScript
539
- npm test # Run test suite (121 tests)
697
+ npm test # Run test suite (217 tests)
540
698
  npm run lint # Check code style
541
699
  npm run format # Format code
542
700
  ```