apple-notes-mcp 1.1.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/LICENSE +21 -0
- package/README.md +522 -0
- package/build/index.js +289 -0
- package/build/index.test.js +446 -0
- package/build/services/appleNotesManager.js +720 -0
- package/build/services/appleNotesManager.test.js +684 -0
- package/build/types.js +13 -0
- package/build/utils/applescript.js +141 -0
- package/build/utils/applescript.test.js +129 -0
- package/package.json +70 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Rob Sweet
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
# Apple Notes MCP Server
|
|
2
|
+
|
|
3
|
+
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that enables AI assistants like Claude to read, create, search, and manage notes in Apple Notes on macOS.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/apple-notes-mcp)
|
|
6
|
+
[](https://github.com/sweetrb/apple-notes-mcp/actions/workflows/ci.yml)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
|
|
9
|
+
## What is This?
|
|
10
|
+
|
|
11
|
+
This server acts as a bridge between AI assistants and Apple Notes. Once configured, you can ask Claude (or any MCP-compatible AI) to:
|
|
12
|
+
|
|
13
|
+
- "Save this conversation as a note called 'Meeting Summary'"
|
|
14
|
+
- "Find all my notes about the project deadline"
|
|
15
|
+
- "Read my shopping list note"
|
|
16
|
+
- "Move my draft notes to the Archive folder"
|
|
17
|
+
- "What notes do I have in my Work folder?"
|
|
18
|
+
|
|
19
|
+
The AI assistant communicates with this server, which then uses AppleScript to interact with the Notes app on your Mac. All data stays local on your machine.
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
### Using Claude Code (Easiest)
|
|
24
|
+
|
|
25
|
+
If you're using [Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview) (in Terminal or VS Code), just ask Claude to install it:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Install the apple-notes-mcp MCP server so you can help me manage my Apple Notes
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Claude will handle the installation and configuration automatically.
|
|
32
|
+
|
|
33
|
+
### Manual Installation
|
|
34
|
+
|
|
35
|
+
**1. Install the server:**
|
|
36
|
+
```bash
|
|
37
|
+
npm install -g apple-notes-mcp
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**2. Add to Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`):
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"mcpServers": {
|
|
44
|
+
"apple-notes": {
|
|
45
|
+
"command": "npx",
|
|
46
|
+
"args": ["apple-notes-mcp"]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**3. Restart Claude Desktop** and start using natural language:
|
|
53
|
+
```
|
|
54
|
+
"Create a note called 'Ideas' with my brainstorming thoughts"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
On first use, macOS will ask for permission to automate Notes.app. Click "OK" to allow.
|
|
58
|
+
|
|
59
|
+
## Requirements
|
|
60
|
+
|
|
61
|
+
- **macOS** - Apple Notes and AppleScript are macOS-only
|
|
62
|
+
- **Node.js 20+** - Required for the MCP server
|
|
63
|
+
- **Apple Notes** - Must have at least one account configured (iCloud, Gmail, etc.)
|
|
64
|
+
|
|
65
|
+
## Features
|
|
66
|
+
|
|
67
|
+
| Feature | Description |
|
|
68
|
+
|---------|-------------|
|
|
69
|
+
| **Create Notes** | Create notes with titles, content, and optional organization |
|
|
70
|
+
| **Search Notes** | Find notes by title or search within note content |
|
|
71
|
+
| **Read Notes** | Retrieve note content and metadata |
|
|
72
|
+
| **Update Notes** | Modify existing notes (title and/or content) |
|
|
73
|
+
| **Delete Notes** | Remove notes (moves to Recently Deleted) |
|
|
74
|
+
| **Move Notes** | Organize notes into folders |
|
|
75
|
+
| **Folder Management** | Create, list, and delete folders |
|
|
76
|
+
| **Multi-Account** | Work with iCloud, Gmail, Exchange, or any configured account |
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Tool Reference
|
|
81
|
+
|
|
82
|
+
This section documents all available tools. AI agents should use these tool names and parameters exactly as specified.
|
|
83
|
+
|
|
84
|
+
### Note Operations
|
|
85
|
+
|
|
86
|
+
#### `create-note`
|
|
87
|
+
|
|
88
|
+
Creates a new note in Apple Notes.
|
|
89
|
+
|
|
90
|
+
| Parameter | Type | Required | Description |
|
|
91
|
+
|-----------|------|----------|-------------|
|
|
92
|
+
| `title` | string | Yes | The title of the note (becomes first line) |
|
|
93
|
+
| `content` | string | Yes | The body content of the note |
|
|
94
|
+
| `tags` | string[] | No | Tags for organization (stored in metadata) |
|
|
95
|
+
|
|
96
|
+
**Example:**
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"title": "Meeting Notes",
|
|
100
|
+
"content": "Discussed Q4 roadmap and budget allocation",
|
|
101
|
+
"tags": ["work", "meetings"]
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Returns:** Confirmation message with note title, or error if creation failed.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
#### `search-notes`
|
|
110
|
+
|
|
111
|
+
Searches for notes by title or content.
|
|
112
|
+
|
|
113
|
+
| Parameter | Type | Required | Description |
|
|
114
|
+
|-----------|------|----------|-------------|
|
|
115
|
+
| `query` | string | Yes | Text to search for |
|
|
116
|
+
| `searchContent` | boolean | No | If `true`, searches note body; if `false` (default), searches titles only |
|
|
117
|
+
| `account` | string | No | Account to search in (defaults to iCloud) |
|
|
118
|
+
|
|
119
|
+
**Example - Search titles:**
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"query": "meeting"
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Example - Search content:**
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"query": "budget allocation",
|
|
130
|
+
"searchContent": true
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Returns:** List of matching note titles, or message if no matches found.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
#### `get-note-content`
|
|
139
|
+
|
|
140
|
+
Retrieves the full content of a specific note.
|
|
141
|
+
|
|
142
|
+
| Parameter | Type | Required | Description |
|
|
143
|
+
|-----------|------|----------|-------------|
|
|
144
|
+
| `title` | string | Yes | Exact title of the note to retrieve |
|
|
145
|
+
| `account` | string | No | Account containing the note (defaults to iCloud) |
|
|
146
|
+
|
|
147
|
+
**Example:**
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"title": "Shopping List"
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Returns:** The HTML content of the note, or error if not found.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
#### `get-note-details`
|
|
159
|
+
|
|
160
|
+
Retrieves metadata about a note (without full content).
|
|
161
|
+
|
|
162
|
+
| Parameter | Type | Required | Description |
|
|
163
|
+
|-----------|------|----------|-------------|
|
|
164
|
+
| `title` | string | Yes | Exact title of the note |
|
|
165
|
+
| `account` | string | No | Account containing the note (defaults to iCloud) |
|
|
166
|
+
|
|
167
|
+
**Example:**
|
|
168
|
+
```json
|
|
169
|
+
{
|
|
170
|
+
"title": "Project Plan"
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Returns:** JSON with note metadata:
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"id": "x-coredata://...",
|
|
178
|
+
"title": "Project Plan",
|
|
179
|
+
"created": "2025-01-15T10:30:00.000Z",
|
|
180
|
+
"modified": "2025-01-20T14:22:00.000Z",
|
|
181
|
+
"shared": false,
|
|
182
|
+
"passwordProtected": false,
|
|
183
|
+
"account": "iCloud"
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
#### `get-note-by-id`
|
|
190
|
+
|
|
191
|
+
Retrieves a note using its unique CoreData identifier.
|
|
192
|
+
|
|
193
|
+
| Parameter | Type | Required | Description |
|
|
194
|
+
|-----------|------|----------|-------------|
|
|
195
|
+
| `id` | string | Yes | The CoreData URL identifier (e.g., `x-coredata://...`) |
|
|
196
|
+
|
|
197
|
+
**Returns:** JSON with note metadata, or error if not found.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
#### `update-note`
|
|
202
|
+
|
|
203
|
+
Updates an existing note's content and/or title.
|
|
204
|
+
|
|
205
|
+
| Parameter | Type | Required | Description |
|
|
206
|
+
|-----------|------|----------|-------------|
|
|
207
|
+
| `title` | string | Yes | Current title of the note to update |
|
|
208
|
+
| `newTitle` | string | No | New title (if changing the title) |
|
|
209
|
+
| `newContent` | string | Yes | New content for the note body |
|
|
210
|
+
| `account` | string | No | Account containing the note (defaults to iCloud) |
|
|
211
|
+
|
|
212
|
+
**Example - Update content only:**
|
|
213
|
+
```json
|
|
214
|
+
{
|
|
215
|
+
"title": "Shopping List",
|
|
216
|
+
"newContent": "- Milk\n- Eggs\n- Bread\n- Butter"
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Example - Update title and content:**
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"title": "Draft",
|
|
224
|
+
"newTitle": "Final Version",
|
|
225
|
+
"newContent": "This is the completed document."
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Returns:** Confirmation message, or error if note not found.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
#### `delete-note`
|
|
234
|
+
|
|
235
|
+
Deletes a note (moves to Recently Deleted in Notes.app).
|
|
236
|
+
|
|
237
|
+
| Parameter | Type | Required | Description |
|
|
238
|
+
|-----------|------|----------|-------------|
|
|
239
|
+
| `title` | string | Yes | Exact title of the note to delete |
|
|
240
|
+
| `account` | string | No | Account containing the note (defaults to iCloud) |
|
|
241
|
+
|
|
242
|
+
**Example:**
|
|
243
|
+
```json
|
|
244
|
+
{
|
|
245
|
+
"title": "Old Draft"
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Returns:** Confirmation message, or error if note not found.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
#### `move-note`
|
|
254
|
+
|
|
255
|
+
Moves a note to a different folder.
|
|
256
|
+
|
|
257
|
+
| Parameter | Type | Required | Description |
|
|
258
|
+
|-----------|------|----------|-------------|
|
|
259
|
+
| `title` | string | Yes | Title of the note to move |
|
|
260
|
+
| `folder` | string | Yes | Name of the destination folder |
|
|
261
|
+
| `account` | string | No | Account containing the note (defaults to iCloud) |
|
|
262
|
+
|
|
263
|
+
**Example:**
|
|
264
|
+
```json
|
|
265
|
+
{
|
|
266
|
+
"title": "Completed Task",
|
|
267
|
+
"folder": "Archive"
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
**Returns:** Confirmation message, or error if note or folder not found.
|
|
272
|
+
|
|
273
|
+
**Note:** This operation copies the note to the new folder then deletes the original. If the delete fails, the note will exist in both locations.
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
#### `list-notes`
|
|
278
|
+
|
|
279
|
+
Lists all notes, optionally filtered by folder.
|
|
280
|
+
|
|
281
|
+
| Parameter | Type | Required | Description |
|
|
282
|
+
|-----------|------|----------|-------------|
|
|
283
|
+
| `account` | string | No | Account to list notes from (defaults to iCloud) |
|
|
284
|
+
| `folder` | string | No | Filter to notes in this folder only |
|
|
285
|
+
|
|
286
|
+
**Example - All notes:**
|
|
287
|
+
```json
|
|
288
|
+
{}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**Example - Notes in a folder:**
|
|
292
|
+
```json
|
|
293
|
+
{
|
|
294
|
+
"folder": "Work"
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**Returns:** List of note titles.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
### Folder Operations
|
|
303
|
+
|
|
304
|
+
#### `list-folders`
|
|
305
|
+
|
|
306
|
+
Lists all folders in an account.
|
|
307
|
+
|
|
308
|
+
| Parameter | Type | Required | Description |
|
|
309
|
+
|-----------|------|----------|-------------|
|
|
310
|
+
| `account` | string | No | Account to list folders from (defaults to iCloud) |
|
|
311
|
+
|
|
312
|
+
**Example:**
|
|
313
|
+
```json
|
|
314
|
+
{}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
**Returns:** List of folder names.
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
#### `create-folder`
|
|
322
|
+
|
|
323
|
+
Creates a new folder.
|
|
324
|
+
|
|
325
|
+
| Parameter | Type | Required | Description |
|
|
326
|
+
|-----------|------|----------|-------------|
|
|
327
|
+
| `name` | string | Yes | Name for the new folder |
|
|
328
|
+
| `account` | string | No | Account to create folder in (defaults to iCloud) |
|
|
329
|
+
|
|
330
|
+
**Example:**
|
|
331
|
+
```json
|
|
332
|
+
{
|
|
333
|
+
"name": "Work Projects"
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
**Returns:** Confirmation message, or error if folder already exists.
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
#### `delete-folder`
|
|
342
|
+
|
|
343
|
+
Deletes a folder.
|
|
344
|
+
|
|
345
|
+
| Parameter | Type | Required | Description |
|
|
346
|
+
|-----------|------|----------|-------------|
|
|
347
|
+
| `name` | string | Yes | Name of the folder to delete |
|
|
348
|
+
| `account` | string | No | Account containing the folder (defaults to iCloud) |
|
|
349
|
+
|
|
350
|
+
**Example:**
|
|
351
|
+
```json
|
|
352
|
+
{
|
|
353
|
+
"name": "Old Projects"
|
|
354
|
+
}
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**Returns:** Confirmation message, or error if folder not found or not empty.
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
### Account Operations
|
|
362
|
+
|
|
363
|
+
#### `list-accounts`
|
|
364
|
+
|
|
365
|
+
Lists all configured Notes accounts.
|
|
366
|
+
|
|
367
|
+
**Parameters:** None
|
|
368
|
+
|
|
369
|
+
**Example:**
|
|
370
|
+
```json
|
|
371
|
+
{}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Returns:** List of account names (e.g., "iCloud", "Gmail", "Exchange").
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## Usage Patterns
|
|
379
|
+
|
|
380
|
+
### Basic Workflow
|
|
381
|
+
|
|
382
|
+
```
|
|
383
|
+
User: "Create a note called 'Todo' with my tasks for today"
|
|
384
|
+
AI: [calls create-note with title="Todo", content="Tasks for today..."]
|
|
385
|
+
"I've created a note called 'Todo' with your tasks."
|
|
386
|
+
|
|
387
|
+
User: "What notes do I have?"
|
|
388
|
+
AI: [calls list-notes]
|
|
389
|
+
"You have 15 notes: Todo, Shopping List, Meeting Notes..."
|
|
390
|
+
|
|
391
|
+
User: "Show me the Shopping List"
|
|
392
|
+
AI: [calls get-note-content with title="Shopping List"]
|
|
393
|
+
"Here's your shopping list: - Milk - Eggs - Bread..."
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### Working with Accounts
|
|
397
|
+
|
|
398
|
+
By default, all operations use iCloud. To work with other accounts:
|
|
399
|
+
|
|
400
|
+
```
|
|
401
|
+
User: "What accounts do I have?"
|
|
402
|
+
AI: [calls list-accounts]
|
|
403
|
+
"You have 3 accounts: iCloud, Gmail, Exchange"
|
|
404
|
+
|
|
405
|
+
User: "List notes in my Gmail account"
|
|
406
|
+
AI: [calls list-notes with account="Gmail"]
|
|
407
|
+
"Your Gmail account has 5 notes..."
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Organizing with Folders
|
|
411
|
+
|
|
412
|
+
```
|
|
413
|
+
User: "Create a folder called 'Archive'"
|
|
414
|
+
AI: [calls create-folder with name="Archive"]
|
|
415
|
+
"Created folder 'Archive'"
|
|
416
|
+
|
|
417
|
+
User: "Move my old meeting notes to Archive"
|
|
418
|
+
AI: [calls move-note with title="Old Meeting Notes", folder="Archive"]
|
|
419
|
+
"Moved 'Old Meeting Notes' to 'Archive'"
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Installation Options
|
|
425
|
+
|
|
426
|
+
### npm (Recommended)
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
npm install -g apple-notes-mcp
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### From Source
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
git clone https://github.com/sweetrb/mcp-apple-notes.git
|
|
436
|
+
cd mcp-apple-notes
|
|
437
|
+
npm install
|
|
438
|
+
npm run build
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
If installed from source, use this configuration:
|
|
442
|
+
```json
|
|
443
|
+
{
|
|
444
|
+
"mcpServers": {
|
|
445
|
+
"apple-notes": {
|
|
446
|
+
"command": "node",
|
|
447
|
+
"args": ["/path/to/mcp-apple-notes/build/index.js"]
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## Security and Privacy
|
|
456
|
+
|
|
457
|
+
- **Local only** - All operations happen locally via AppleScript. No data is sent to external servers.
|
|
458
|
+
- **Permission required** - macOS will prompt for automation permission on first use.
|
|
459
|
+
- **Password-protected notes** - Notes with passwords cannot be read or modified via this server.
|
|
460
|
+
- **No credential storage** - The server doesn't store any passwords or authentication tokens.
|
|
461
|
+
|
|
462
|
+
---
|
|
463
|
+
|
|
464
|
+
## Known Limitations
|
|
465
|
+
|
|
466
|
+
| Limitation | Reason |
|
|
467
|
+
|------------|--------|
|
|
468
|
+
| macOS only | Apple Notes and AppleScript are macOS-specific |
|
|
469
|
+
| No attachments | AppleScript cannot access note attachments |
|
|
470
|
+
| No pinned notes | Pin status is not exposed via AppleScript |
|
|
471
|
+
| No rich formatting | Content is HTML; complex formatting may not render |
|
|
472
|
+
| Title matching | Most operations require exact title matches |
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## Troubleshooting
|
|
477
|
+
|
|
478
|
+
### "Notes.app not responding"
|
|
479
|
+
- Ensure Notes.app is not frozen
|
|
480
|
+
- Try opening Notes.app manually
|
|
481
|
+
- Restart the MCP server
|
|
482
|
+
|
|
483
|
+
### "Permission denied"
|
|
484
|
+
- macOS needs automation permission
|
|
485
|
+
- Go to System Preferences > Privacy & Security > Automation
|
|
486
|
+
- Ensure your terminal/Claude has permission to control Notes
|
|
487
|
+
|
|
488
|
+
### "Note not found"
|
|
489
|
+
- Note titles must match exactly (case-sensitive)
|
|
490
|
+
- Check if the note is in a different account
|
|
491
|
+
- Use `list-notes` to see available notes
|
|
492
|
+
|
|
493
|
+
---
|
|
494
|
+
|
|
495
|
+
## Development
|
|
496
|
+
|
|
497
|
+
```bash
|
|
498
|
+
npm install # Install dependencies
|
|
499
|
+
npm run build # Compile TypeScript
|
|
500
|
+
npm test # Run test suite (121 tests)
|
|
501
|
+
npm run lint # Check code style
|
|
502
|
+
npm run format # Format code
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
---
|
|
506
|
+
|
|
507
|
+
## Author
|
|
508
|
+
|
|
509
|
+
**Rob Sweet** - President, [Superior Technologies Research](https://www.superiortech.io)
|
|
510
|
+
|
|
511
|
+
A software consulting, contracting, and development company.
|
|
512
|
+
|
|
513
|
+
- Email: rob@superiortech.io
|
|
514
|
+
- GitHub: [@sweetrb](https://github.com/sweetrb)
|
|
515
|
+
|
|
516
|
+
## License
|
|
517
|
+
|
|
518
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
519
|
+
|
|
520
|
+
## Contributing
|
|
521
|
+
|
|
522
|
+
Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|