@l22-io/orchard-mcp 0.3.1
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 +178 -0
- package/build/bridge.d.ts +15 -0
- package/build/bridge.js +122 -0
- package/build/bridge.js.map +1 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +28 -0
- package/build/index.js.map +1 -0
- package/build/setup.d.ts +1 -0
- package/build/setup.js +362 -0
- package/build/setup.js.map +1 -0
- package/build/tools/calendar.d.ts +2 -0
- package/build/tools/calendar.js +61 -0
- package/build/tools/calendar.js.map +1 -0
- package/build/tools/files.d.ts +2 -0
- package/build/tools/files.js +131 -0
- package/build/tools/files.js.map +1 -0
- package/build/tools/mail.d.ts +2 -0
- package/build/tools/mail.js +152 -0
- package/build/tools/mail.js.map +1 -0
- package/build/tools/reminders.d.ts +2 -0
- package/build/tools/reminders.js +114 -0
- package/build/tools/reminders.js.map +1 -0
- package/build/tools/system.d.ts +2 -0
- package/build/tools/system.js +10 -0
- package/build/tools/system.js.map +1 -0
- package/package.json +63 -0
- package/scripts/postinstall.sh +21 -0
- package/swift/.build/AppleBridge.app/Contents/Info.plist +16 -0
- package/swift/.build/AppleBridge.app/Contents/MacOS/apple-bridge +0 -0
- package/swift/.build/AppleBridge.app/Contents/_CodeSignature/CodeResources +115 -0
- package/swift/Sources/AppleBridge/Info.plist +16 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { bridgeData } from "../bridge.js";
|
|
3
|
+
export function registerMailTools(server) {
|
|
4
|
+
server.tool("mail.list_accounts", "List all Apple Mail accounts with their mailboxes and unread counts. Requires Mail.app to be running.", {}, async () => {
|
|
5
|
+
const data = await bridgeData(["mail-accounts"]);
|
|
6
|
+
return {
|
|
7
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
8
|
+
};
|
|
9
|
+
});
|
|
10
|
+
server.tool("mail.unread_summary", "Get unread email summary across all accounts: unread count per account and recent unread message subjects/senders. Requires Mail.app to be running.", {
|
|
11
|
+
limit: z
|
|
12
|
+
.number()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Max unread messages to return per account (default: 10)"),
|
|
15
|
+
}, async ({ limit }) => {
|
|
16
|
+
const args = ["mail-unread"];
|
|
17
|
+
if (limit) {
|
|
18
|
+
args.push("--limit", String(limit));
|
|
19
|
+
}
|
|
20
|
+
const data = await bridgeData(args);
|
|
21
|
+
return {
|
|
22
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
server.tool("mail.search", "Search email messages by subject or sender text. Returns headers only (no body) for performance. Requires Mail.app to be running.", {
|
|
26
|
+
query: z
|
|
27
|
+
.string()
|
|
28
|
+
.describe("Search term to match against message subject or sender"),
|
|
29
|
+
account: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Optional account name to filter by"),
|
|
33
|
+
mailbox: z
|
|
34
|
+
.string()
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("Mailbox to search in (default: inbox)"),
|
|
37
|
+
limit: z
|
|
38
|
+
.number()
|
|
39
|
+
.optional()
|
|
40
|
+
.describe("Max results to return (default: 20)"),
|
|
41
|
+
}, async ({ query, account, mailbox, limit }) => {
|
|
42
|
+
const args = ["mail-search", "--query", query];
|
|
43
|
+
if (account) {
|
|
44
|
+
args.push("--account", account);
|
|
45
|
+
}
|
|
46
|
+
if (mailbox) {
|
|
47
|
+
args.push("--mailbox", mailbox);
|
|
48
|
+
}
|
|
49
|
+
if (limit) {
|
|
50
|
+
args.push("--limit", String(limit));
|
|
51
|
+
}
|
|
52
|
+
const data = await bridgeData(args);
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
server.tool("mail.read_message", "Get the full content of an email message by its message ID (from mail.search or mail.unread_summary). Returns subject, sender, date, body, to, cc, and attachments (name, MIME type, index for use with mail.save_attachment).", {
|
|
58
|
+
messageId: z
|
|
59
|
+
.string()
|
|
60
|
+
.describe("Message ID (from mail.search or mail.unread_summary results)"),
|
|
61
|
+
}, async ({ messageId }) => {
|
|
62
|
+
const data = await bridgeData(["mail-message", "--id", messageId]);
|
|
63
|
+
return {
|
|
64
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
server.tool("mail.create_draft", "Create a draft email in Mail.app. Opens a compose window for user review before sending. Requires Mail.app to be running.", {
|
|
68
|
+
to: z
|
|
69
|
+
.string()
|
|
70
|
+
.describe("Recipient email addresses (comma-separated for multiple)"),
|
|
71
|
+
subject: z.string().describe("Email subject line"),
|
|
72
|
+
body: z.string().describe("Email body text"),
|
|
73
|
+
cc: z
|
|
74
|
+
.string()
|
|
75
|
+
.optional()
|
|
76
|
+
.describe("CC email addresses (comma-separated for multiple)"),
|
|
77
|
+
bcc: z
|
|
78
|
+
.string()
|
|
79
|
+
.optional()
|
|
80
|
+
.describe("BCC email addresses (comma-separated for multiple)"),
|
|
81
|
+
account: z
|
|
82
|
+
.string()
|
|
83
|
+
.optional()
|
|
84
|
+
.describe("Sender email address (from mail.list_accounts). Uses default account if omitted."),
|
|
85
|
+
}, async ({ to, subject, body, cc, bcc, account }) => {
|
|
86
|
+
const args = [
|
|
87
|
+
"mail-create-draft",
|
|
88
|
+
"--to",
|
|
89
|
+
to,
|
|
90
|
+
"--subject",
|
|
91
|
+
subject,
|
|
92
|
+
"--body",
|
|
93
|
+
body,
|
|
94
|
+
];
|
|
95
|
+
if (cc) {
|
|
96
|
+
args.push("--cc", cc);
|
|
97
|
+
}
|
|
98
|
+
if (bcc) {
|
|
99
|
+
args.push("--bcc", bcc);
|
|
100
|
+
}
|
|
101
|
+
if (account) {
|
|
102
|
+
args.push("--account", account);
|
|
103
|
+
}
|
|
104
|
+
const data = await bridgeData(args);
|
|
105
|
+
return {
|
|
106
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
107
|
+
};
|
|
108
|
+
});
|
|
109
|
+
server.tool("mail.flagged", "List flagged (starred) email messages across all accounts. Returns message headers. Requires Mail.app to be running.", {
|
|
110
|
+
limit: z
|
|
111
|
+
.number()
|
|
112
|
+
.optional()
|
|
113
|
+
.describe("Max results to return (default: 20)"),
|
|
114
|
+
}, async ({ limit }) => {
|
|
115
|
+
const args = ["mail-flagged"];
|
|
116
|
+
if (limit) {
|
|
117
|
+
args.push("--limit", String(limit));
|
|
118
|
+
}
|
|
119
|
+
const data = await bridgeData(args);
|
|
120
|
+
return {
|
|
121
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
server.tool("mail.save_attachment", "Save an email attachment to disk. Use mail.read_message first to see available attachments and their indices. Returns the saved file path. Requires Mail.app to be running.", {
|
|
125
|
+
messageId: z
|
|
126
|
+
.string()
|
|
127
|
+
.describe("Message ID (from mail.search or mail.read_message results)"),
|
|
128
|
+
index: z
|
|
129
|
+
.number()
|
|
130
|
+
.describe("Attachment index (0-based, from mail.read_message attachments array)"),
|
|
131
|
+
path: z
|
|
132
|
+
.string()
|
|
133
|
+
.optional()
|
|
134
|
+
.describe("Output directory (default: /tmp/orchard-mcp-attachments)"),
|
|
135
|
+
}, async ({ messageId, index, path }) => {
|
|
136
|
+
const args = [
|
|
137
|
+
"mail-save-attachment",
|
|
138
|
+
"--id",
|
|
139
|
+
messageId,
|
|
140
|
+
"--index",
|
|
141
|
+
String(index),
|
|
142
|
+
];
|
|
143
|
+
if (path) {
|
|
144
|
+
args.push("--path", path);
|
|
145
|
+
}
|
|
146
|
+
const data = await bridgeData(args);
|
|
147
|
+
return {
|
|
148
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
149
|
+
};
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=mail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/tools/mail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { bridgeData } from "../bridge.js";
|
|
3
|
+
export function registerReminderTools(server) {
|
|
4
|
+
server.tool("reminders.list_lists", "List all Apple Reminders lists with account name, color, and modification status.", {}, async () => {
|
|
5
|
+
const data = await bridgeData(["reminder-lists"]);
|
|
6
|
+
return {
|
|
7
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
8
|
+
};
|
|
9
|
+
});
|
|
10
|
+
server.tool("reminders.list_reminders", "List reminders from a specific list or all lists. Supports filters: incomplete (default), completed, overdue, dueToday, all.", {
|
|
11
|
+
list: z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Filter to a specific reminder list name"),
|
|
15
|
+
filter: z
|
|
16
|
+
.enum(["incomplete", "completed", "overdue", "dueToday", "all"])
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Filter reminders by status (default: incomplete)"),
|
|
19
|
+
limit: z
|
|
20
|
+
.number()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Max reminders to return (default: 50)"),
|
|
23
|
+
}, async ({ list, filter, limit }) => {
|
|
24
|
+
const args = ["reminders"];
|
|
25
|
+
if (list) {
|
|
26
|
+
args.push("--list", list);
|
|
27
|
+
}
|
|
28
|
+
if (filter) {
|
|
29
|
+
args.push("--filter", filter);
|
|
30
|
+
}
|
|
31
|
+
if (limit !== undefined) {
|
|
32
|
+
args.push("--limit", String(limit));
|
|
33
|
+
}
|
|
34
|
+
const data = await bridgeData(args);
|
|
35
|
+
return {
|
|
36
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
server.tool("reminders.today", "Get incomplete reminders due today plus any overdue reminders across all lists.", {}, async () => {
|
|
40
|
+
const data = await bridgeData(["reminders-today"]);
|
|
41
|
+
return {
|
|
42
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
server.tool("reminders.create_list", "Create a new reminder list.", {
|
|
46
|
+
name: z.string().describe("Name for the new list"),
|
|
47
|
+
}, async ({ name }) => {
|
|
48
|
+
const data = await bridgeData(["reminder-create-list", "--name", name]);
|
|
49
|
+
return {
|
|
50
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
server.tool("reminders.create_reminder", "Create a new reminder in a list.", {
|
|
54
|
+
list: z.string().describe("List name to add the reminder to"),
|
|
55
|
+
title: z.string().describe("Reminder title"),
|
|
56
|
+
due: z
|
|
57
|
+
.string()
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("Due date (ISO 8601, e.g. 2026-02-18 or 2026-02-18T10:00:00Z)"),
|
|
60
|
+
priority: z
|
|
61
|
+
.number()
|
|
62
|
+
.optional()
|
|
63
|
+
.describe("Priority: 0=none, 1=high, 5=medium, 9=low (default: 0)"),
|
|
64
|
+
notes: z.string().optional().describe("Notes for the reminder"),
|
|
65
|
+
}, async ({ list, title, due, priority, notes }) => {
|
|
66
|
+
const args = ["reminder-create", "--list", list, "--title", title];
|
|
67
|
+
if (due) {
|
|
68
|
+
args.push("--due", due);
|
|
69
|
+
}
|
|
70
|
+
if (priority !== undefined) {
|
|
71
|
+
args.push("--priority", String(priority));
|
|
72
|
+
}
|
|
73
|
+
if (notes) {
|
|
74
|
+
args.push("--notes", notes);
|
|
75
|
+
}
|
|
76
|
+
const data = await bridgeData(args);
|
|
77
|
+
return {
|
|
78
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
server.tool("reminders.complete_reminder", "Mark a reminder as completed.", {
|
|
82
|
+
id: z.string().describe("Reminder ID (from reminders.list_reminders output)"),
|
|
83
|
+
}, async ({ id }) => {
|
|
84
|
+
const data = await bridgeData(["reminder-complete", "--id", id]);
|
|
85
|
+
return {
|
|
86
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
server.tool("reminders.delete_reminder", "Delete a reminder.", {
|
|
90
|
+
id: z.string().describe("Reminder ID (from reminders.list_reminders output)"),
|
|
91
|
+
}, async ({ id }) => {
|
|
92
|
+
const data = await bridgeData(["reminder-delete", "--id", id]);
|
|
93
|
+
return {
|
|
94
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
server.tool("reminders.delete_list", "Delete a reminder list. Fails if the list has reminders unless force is true.", {
|
|
98
|
+
id: z.string().describe("List ID (from reminders.list_lists output)"),
|
|
99
|
+
force: z
|
|
100
|
+
.boolean()
|
|
101
|
+
.optional()
|
|
102
|
+
.describe("Delete even if the list has reminders (default: false)"),
|
|
103
|
+
}, async ({ id, force }) => {
|
|
104
|
+
const args = ["reminder-delete-list", "--id", id];
|
|
105
|
+
if (force) {
|
|
106
|
+
args.push("--force");
|
|
107
|
+
}
|
|
108
|
+
const data = await bridgeData(args);
|
|
109
|
+
return {
|
|
110
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=reminders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reminders.js","sourceRoot":"","sources":["../../src/tools/reminders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { bridgeData } from "../bridge.js";
|
|
2
|
+
export function registerSystemTools(server) {
|
|
3
|
+
server.tool("system.doctor", "Check orchard-mcp permissions status, list accessible Calendar accounts, Mail accounts, and Reminders status. Run this first to diagnose access issues.", {}, async () => {
|
|
4
|
+
const data = await bridgeData(["doctor"]);
|
|
5
|
+
return {
|
|
6
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
7
|
+
};
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,yJAAyJ,EACzJ,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@l22-io/orchard-mcp",
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"description": "MCP server for Apple Calendar, Mail, Reminders, and Files on macOS using native EventKit",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/l22-io/orchard-mcp.git"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/l22-io/orchard-mcp#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/l22-io/orchard-mcp/issues"
|
|
15
|
+
},
|
|
16
|
+
"type": "module",
|
|
17
|
+
"bin": {
|
|
18
|
+
"orchard-mcp": "./build/index.js"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "npm run build:swift && npm run build:ts",
|
|
22
|
+
"build:ts": "tsc && chmod 755 build/index.js",
|
|
23
|
+
"build:swift": "cd swift && swift build -c release -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __info_plist -Xlinker Sources/AppleBridge/Info.plist",
|
|
24
|
+
"postinstall": "bash scripts/postinstall.sh",
|
|
25
|
+
"prepublishOnly": "npm run build:ts && bash scripts/prepublish.sh",
|
|
26
|
+
"dev": "tsc --watch",
|
|
27
|
+
"start": "node build/index.js",
|
|
28
|
+
"test": "tsx --test tests/*.test.ts",
|
|
29
|
+
"lint": "tsc --noEmit",
|
|
30
|
+
"clean": "rm -rf build && cd swift && swift package clean"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"build",
|
|
34
|
+
"scripts/postinstall.sh",
|
|
35
|
+
"swift/.build/AppleBridge.app",
|
|
36
|
+
"swift/Sources/AppleBridge/Info.plist"
|
|
37
|
+
],
|
|
38
|
+
"os": ["darwin"],
|
|
39
|
+
"keywords": [
|
|
40
|
+
"mcp",
|
|
41
|
+
"apple",
|
|
42
|
+
"calendar",
|
|
43
|
+
"mail",
|
|
44
|
+
"reminders",
|
|
45
|
+
"eventkit",
|
|
46
|
+
"macos",
|
|
47
|
+
"model-context-protocol"
|
|
48
|
+
],
|
|
49
|
+
"author": "l22.io GmbH",
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18.0.0"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@modelcontextprotocol/sdk": "^1.24.0",
|
|
56
|
+
"zod": "^3.25.0"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@types/node": "^22.0.0",
|
|
60
|
+
"tsx": "^4.19.0",
|
|
61
|
+
"typescript": "^5.7.0"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
5
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
6
|
+
APP_BUNDLE="$PROJECT_ROOT/swift/.build/AppleBridge.app"
|
|
7
|
+
|
|
8
|
+
# Skip on non-macOS (shouldn't happen due to os field, but be safe)
|
|
9
|
+
if [ "$(uname)" != "Darwin" ]; then
|
|
10
|
+
echo "[orchard-mcp] macOS required. Skipping postinstall."
|
|
11
|
+
exit 0
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Re-sign the .app bundle (ad-hoc signatures may not survive npm packaging)
|
|
15
|
+
if [ -d "$APP_BUNDLE" ]; then
|
|
16
|
+
echo "[orchard-mcp] Codesigning AppleBridge.app..."
|
|
17
|
+
codesign --force --sign - "$APP_BUNDLE" 2>/dev/null || true
|
|
18
|
+
echo "[orchard-mcp] Ready. Run 'orchard-mcp setup' to configure permissions."
|
|
19
|
+
else
|
|
20
|
+
echo "[orchard-mcp] Warning: AppleBridge.app not found. Run 'orchard-mcp setup' to build it."
|
|
21
|
+
fi
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>CFBundleIdentifier</key>
|
|
6
|
+
<string>io.l22.apple-bridge</string>
|
|
7
|
+
<key>CFBundleName</key>
|
|
8
|
+
<string>apple-bridge</string>
|
|
9
|
+
<key>CFBundleExecutable</key>
|
|
10
|
+
<string>apple-bridge</string>
|
|
11
|
+
<key>NSCalendarsUsageDescription</key>
|
|
12
|
+
<string>orchard-mcp needs access to your calendars to list events and search.</string>
|
|
13
|
+
<key>NSRemindersUsageDescription</key>
|
|
14
|
+
<string>orchard-mcp needs access to your reminders to list and filter them.</string>
|
|
15
|
+
</dict>
|
|
16
|
+
</plist>
|
|
Binary file
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>files</key>
|
|
6
|
+
<dict/>
|
|
7
|
+
<key>files2</key>
|
|
8
|
+
<dict/>
|
|
9
|
+
<key>rules</key>
|
|
10
|
+
<dict>
|
|
11
|
+
<key>^Resources/</key>
|
|
12
|
+
<true/>
|
|
13
|
+
<key>^Resources/.*\.lproj/</key>
|
|
14
|
+
<dict>
|
|
15
|
+
<key>optional</key>
|
|
16
|
+
<true/>
|
|
17
|
+
<key>weight</key>
|
|
18
|
+
<real>1000</real>
|
|
19
|
+
</dict>
|
|
20
|
+
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
|
21
|
+
<dict>
|
|
22
|
+
<key>omit</key>
|
|
23
|
+
<true/>
|
|
24
|
+
<key>weight</key>
|
|
25
|
+
<real>1100</real>
|
|
26
|
+
</dict>
|
|
27
|
+
<key>^Resources/Base\.lproj/</key>
|
|
28
|
+
<dict>
|
|
29
|
+
<key>weight</key>
|
|
30
|
+
<real>1010</real>
|
|
31
|
+
</dict>
|
|
32
|
+
<key>^version.plist$</key>
|
|
33
|
+
<true/>
|
|
34
|
+
</dict>
|
|
35
|
+
<key>rules2</key>
|
|
36
|
+
<dict>
|
|
37
|
+
<key>.*\.dSYM($|/)</key>
|
|
38
|
+
<dict>
|
|
39
|
+
<key>weight</key>
|
|
40
|
+
<real>11</real>
|
|
41
|
+
</dict>
|
|
42
|
+
<key>^(.*/)?\.DS_Store$</key>
|
|
43
|
+
<dict>
|
|
44
|
+
<key>omit</key>
|
|
45
|
+
<true/>
|
|
46
|
+
<key>weight</key>
|
|
47
|
+
<real>2000</real>
|
|
48
|
+
</dict>
|
|
49
|
+
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
|
|
50
|
+
<dict>
|
|
51
|
+
<key>nested</key>
|
|
52
|
+
<true/>
|
|
53
|
+
<key>weight</key>
|
|
54
|
+
<real>10</real>
|
|
55
|
+
</dict>
|
|
56
|
+
<key>^.*</key>
|
|
57
|
+
<true/>
|
|
58
|
+
<key>^Info\.plist$</key>
|
|
59
|
+
<dict>
|
|
60
|
+
<key>omit</key>
|
|
61
|
+
<true/>
|
|
62
|
+
<key>weight</key>
|
|
63
|
+
<real>20</real>
|
|
64
|
+
</dict>
|
|
65
|
+
<key>^PkgInfo$</key>
|
|
66
|
+
<dict>
|
|
67
|
+
<key>omit</key>
|
|
68
|
+
<true/>
|
|
69
|
+
<key>weight</key>
|
|
70
|
+
<real>20</real>
|
|
71
|
+
</dict>
|
|
72
|
+
<key>^Resources/</key>
|
|
73
|
+
<dict>
|
|
74
|
+
<key>weight</key>
|
|
75
|
+
<real>20</real>
|
|
76
|
+
</dict>
|
|
77
|
+
<key>^Resources/.*\.lproj/</key>
|
|
78
|
+
<dict>
|
|
79
|
+
<key>optional</key>
|
|
80
|
+
<true/>
|
|
81
|
+
<key>weight</key>
|
|
82
|
+
<real>1000</real>
|
|
83
|
+
</dict>
|
|
84
|
+
<key>^Resources/.*\.lproj/locversion.plist$</key>
|
|
85
|
+
<dict>
|
|
86
|
+
<key>omit</key>
|
|
87
|
+
<true/>
|
|
88
|
+
<key>weight</key>
|
|
89
|
+
<real>1100</real>
|
|
90
|
+
</dict>
|
|
91
|
+
<key>^Resources/Base\.lproj/</key>
|
|
92
|
+
<dict>
|
|
93
|
+
<key>weight</key>
|
|
94
|
+
<real>1010</real>
|
|
95
|
+
</dict>
|
|
96
|
+
<key>^[^/]+$</key>
|
|
97
|
+
<dict>
|
|
98
|
+
<key>nested</key>
|
|
99
|
+
<true/>
|
|
100
|
+
<key>weight</key>
|
|
101
|
+
<real>10</real>
|
|
102
|
+
</dict>
|
|
103
|
+
<key>^embedded\.provisionprofile$</key>
|
|
104
|
+
<dict>
|
|
105
|
+
<key>weight</key>
|
|
106
|
+
<real>20</real>
|
|
107
|
+
</dict>
|
|
108
|
+
<key>^version\.plist$</key>
|
|
109
|
+
<dict>
|
|
110
|
+
<key>weight</key>
|
|
111
|
+
<real>20</real>
|
|
112
|
+
</dict>
|
|
113
|
+
</dict>
|
|
114
|
+
</dict>
|
|
115
|
+
</plist>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>CFBundleIdentifier</key>
|
|
6
|
+
<string>io.l22.apple-bridge</string>
|
|
7
|
+
<key>CFBundleName</key>
|
|
8
|
+
<string>apple-bridge</string>
|
|
9
|
+
<key>CFBundleExecutable</key>
|
|
10
|
+
<string>apple-bridge</string>
|
|
11
|
+
<key>NSCalendarsUsageDescription</key>
|
|
12
|
+
<string>orchard-mcp needs access to your calendars to list events and search.</string>
|
|
13
|
+
<key>NSRemindersUsageDescription</key>
|
|
14
|
+
<string>orchard-mcp needs access to your reminders to list and filter them.</string>
|
|
15
|
+
</dict>
|
|
16
|
+
</plist>
|