mcp-macos 2.0.2 → 2.0.4
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
|
@@ -4,7 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
A Model Context Protocol (MCP) server that gives Claude genuine access to your macOS personal data — **Reminders**, **Calendar**, **Notes**, **Mail**, **Messages**, and **Contacts**. Six apps, working together: ask Claude about tomorrow's meeting and it pulls the calendar event, finds related emails, and creates a prep note — from your phone, your desktop, or the web.
|
|
6
6
|
|
|
7
|
-
Use with Claude Desktop locally, or Claude iOS/web remotely via Cloudflare Tunnel.
|
|
7
|
+
Use with Claude Desktop locally, or Claude iOS/web remotely via Cloudflare Tunnel. **Requires a Mac** — for always-on remote access, a Mac Mini or Mac Studio is recommended.
|
|
8
|
+
|
|
9
|
+
<div align="center">
|
|
10
|
+
<h3>One prompt. Three apps. Real data.</h3>
|
|
11
|
+
|
|
12
|
+
<img src="https://github.com/user-attachments/assets/81ac3db6-0b1c-4312-a93f-5808f14f939b" alt="Demo: Claude reading iMessages, searching Mail, and pulling Contacts from an iPhone" width="350" />
|
|
13
|
+
|
|
14
|
+
<em>Claude reading iMessages, searching Mail, and pulling Contacts — from an iPhone, via Cloudflare Tunnel to a Mac Mini.</em>
|
|
15
|
+
</div>
|
|
8
16
|
|
|
9
17
|
## Quick Start
|
|
10
18
|
|
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
6
6
|
import type { NotesFoldersToolArgs, NotesToolArgs } from '../../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Converts plain text to HTML for Apple Notes' body property.
|
|
9
|
+
* Apple Notes stores body as HTML — assigning plain text collapses newlines.
|
|
10
|
+
* This converts \n to <br> (which Apple normalizes to <div> elements)
|
|
11
|
+
* and escapes HTML entities to prevent injection.
|
|
12
|
+
*/
|
|
13
|
+
export declare function plainTextToHtml(text: string): string;
|
|
7
14
|
export declare function handleReadNotes(args: NotesToolArgs): Promise<CallToolResult>;
|
|
8
15
|
export declare function handleCreateNote(args: NotesToolArgs): Promise<CallToolResult>;
|
|
9
16
|
export declare function handleUpdateNote(args: NotesToolArgs): Promise<CallToolResult>;
|
|
@@ -7,6 +7,21 @@ import { handleAsyncOperation } from '../../utils/errorHandling.js';
|
|
|
7
7
|
import { buildScript, executeJxa, executeJxaWithRetry, sanitizeForJxa, } from '../../utils/jxaExecutor.js';
|
|
8
8
|
import { CreateNoteSchema, CreateNotesFolderSchema, DeleteNoteSchema, ReadNotesSchema, UpdateNoteSchema, } from '../../validation/schemas.js';
|
|
9
9
|
import { extractAndValidateArgs, formatListMarkdown } from './shared.js';
|
|
10
|
+
/**
|
|
11
|
+
* Converts plain text to HTML for Apple Notes' body property.
|
|
12
|
+
* Apple Notes stores body as HTML — assigning plain text collapses newlines.
|
|
13
|
+
* This converts \n to <br> (which Apple normalizes to <div> elements)
|
|
14
|
+
* and escapes HTML entities to prevent injection.
|
|
15
|
+
*/
|
|
16
|
+
export function plainTextToHtml(text) {
|
|
17
|
+
if (!text)
|
|
18
|
+
return '';
|
|
19
|
+
return text
|
|
20
|
+
.replace(/&/g, '&')
|
|
21
|
+
.replace(/</g, '<')
|
|
22
|
+
.replace(/>/g, '>')
|
|
23
|
+
.replace(/\r\n|\r|\n/g, '<br>');
|
|
24
|
+
}
|
|
10
25
|
// --- JXA Script Templates ---
|
|
11
26
|
const LIST_NOTES_SCRIPT = `
|
|
12
27
|
(() => {
|
|
@@ -108,10 +123,10 @@ const APPEND_NOTE_SCRIPT = `
|
|
|
108
123
|
if (notes.length === 0) throw new Error("Note not found");
|
|
109
124
|
const n = notes[0];
|
|
110
125
|
const titleToSet = "{{hasName}}" === "true" ? "{{newName}}" : n.name();
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
n.body =
|
|
126
|
+
const existingPlain = n.plaintext();
|
|
127
|
+
if (existingPlain.length + {{rawNewBodyLength}} + 1 > {{maxBodyLength}}) throw new Error("Combined note body exceeds {{maxBodyLength}} characters (existing: " + existingPlain.length + " + new: " + {{rawNewBodyLength}} + ")");
|
|
128
|
+
const existingHtml = n.body();
|
|
129
|
+
n.body = existingHtml + "<br>" + "{{newBody}}";
|
|
115
130
|
n.name = titleToSet;
|
|
116
131
|
%%moveToFolder%%
|
|
117
132
|
return JSON.stringify({id: n.id(), name: n.name(), folder: n.container().name()});
|
|
@@ -237,7 +252,7 @@ export async function handleCreateNote(args) {
|
|
|
237
252
|
const validated = extractAndValidateArgs(args, CreateNoteSchema);
|
|
238
253
|
const script = buildScript(CREATE_NOTE_SCRIPT, {
|
|
239
254
|
title: validated.title,
|
|
240
|
-
body: validated.body ?? '',
|
|
255
|
+
body: plainTextToHtml(validated.body ?? ''),
|
|
241
256
|
folder: validated.folder ?? 'Notes',
|
|
242
257
|
});
|
|
243
258
|
const result = await executeJxa(script, 10000, 'Notes');
|
|
@@ -258,12 +273,13 @@ export async function handleUpdateNote(args) {
|
|
|
258
273
|
newName: validated.title ?? '',
|
|
259
274
|
};
|
|
260
275
|
if (useAppend) {
|
|
261
|
-
scriptParams.newBody = validated.body ?? '';
|
|
276
|
+
scriptParams.newBody = plainTextToHtml(validated.body ?? '');
|
|
277
|
+
scriptParams.rawNewBodyLength = String((validated.body ?? '').length);
|
|
262
278
|
scriptParams.maxBodyLength = String(VALIDATION.MAX_NOTE_LENGTH);
|
|
263
279
|
}
|
|
264
280
|
else {
|
|
265
281
|
scriptParams.hasBody = validated.body !== undefined ? 'true' : 'false';
|
|
266
|
-
scriptParams.newBody = validated.body ?? '';
|
|
282
|
+
scriptParams.newBody = plainTextToHtml(validated.body ?? '');
|
|
267
283
|
}
|
|
268
284
|
// Build script with data fields (sanitized by buildScript)
|
|
269
285
|
// moveToFolder uses %% placeholder to avoid double-sanitization (contains pre-sanitized JXA code)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notesHandlers.js","sourceRoot":"","sources":["../../../src/tools/handlers/notesHandlers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EACL,WAAW,EACX,UAAU,EACV,mBAAmB,EACnB,cAAc,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"notesHandlers.js","sourceRoot":"","sources":["../../../src/tools/handlers/notesHandlers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-macos",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "MCP server that provides native integration with Apple Reminders, Calendar, Notes, Mail, and Messages on macOS.",
|
|
5
5
|
"author": "Kyle Jensen",
|
|
6
6
|
"contributors": [
|
|
@@ -68,19 +68,19 @@
|
|
|
68
68
|
"exit-on-epipe": "^1.0.1",
|
|
69
69
|
"express": "^5.2.1",
|
|
70
70
|
"express-rate-limit": "^8.2.1",
|
|
71
|
-
"hono": "^4.11.
|
|
71
|
+
"hono": "^4.11.9",
|
|
72
72
|
"jose": "^6.1.3",
|
|
73
73
|
"tsx": "^4.21.0",
|
|
74
74
|
"zod": "^4.3.6"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
77
|
"@babel/preset-env": "^7.29.0",
|
|
78
|
-
"@biomejs/biome": "2.3.
|
|
78
|
+
"@biomejs/biome": "2.3.15",
|
|
79
79
|
"@semantic-release/changelog": "^6.0.3",
|
|
80
80
|
"@semantic-release/git": "^10.0.1",
|
|
81
81
|
"@types/express": "^5.0.6",
|
|
82
82
|
"@types/jest": "^30.0.0",
|
|
83
|
-
"@types/node": "^25.2.
|
|
83
|
+
"@types/node": "^25.2.3",
|
|
84
84
|
"@types/supertest": "^6.0.3",
|
|
85
85
|
"babel-jest": "^30.2.0",
|
|
86
86
|
"babel-plugin-transform-import-meta": "^2.3.3",
|