@heznpc/imcp 0.1.0 → 0.6.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.ko.md +225 -57
- package/README.md +222 -30
- package/dist/calendar/prompts.d.ts +2 -0
- package/dist/calendar/prompts.js +43 -0
- package/dist/calendar/prompts.js.map +1 -0
- package/dist/calendar/scripts.d.ts +20 -0
- package/dist/calendar/scripts.js +283 -0
- package/dist/calendar/scripts.js.map +1 -0
- package/dist/calendar/tools.d.ts +3 -0
- package/dist/calendar/tools.js +252 -0
- package/dist/calendar/tools.js.map +1 -0
- package/dist/contacts/scripts.d.ts +22 -0
- package/dist/contacts/scripts.js +220 -0
- package/dist/contacts/scripts.js.map +1 -0
- package/dist/contacts/tools.d.ts +3 -0
- package/dist/contacts/tools.js +173 -0
- package/dist/contacts/tools.js.map +1 -0
- package/dist/cross/prompts.d.ts +2 -0
- package/dist/cross/prompts.js +177 -0
- package/dist/cross/prompts.js.map +1 -0
- package/dist/finder/scripts.d.ts +8 -0
- package/dist/finder/scripts.js +127 -0
- package/dist/finder/scripts.js.map +1 -0
- package/dist/finder/tools.d.ts +3 -0
- package/dist/finder/tools.js +134 -0
- package/dist/finder/tools.js.map +1 -0
- package/dist/index.js +38 -1
- package/dist/index.js.map +1 -1
- package/dist/intelligence/tools.d.ts +3 -0
- package/dist/intelligence/tools.js +74 -0
- package/dist/intelligence/tools.js.map +1 -0
- package/dist/mail/scripts.d.ts +9 -0
- package/dist/mail/scripts.js +214 -0
- package/dist/mail/scripts.js.map +1 -0
- package/dist/mail/tools.d.ts +3 -0
- package/dist/mail/tools.js +145 -0
- package/dist/mail/tools.js.map +1 -0
- package/dist/music/scripts.d.ts +9 -0
- package/dist/music/scripts.js +180 -0
- package/dist/music/scripts.js.map +1 -0
- package/dist/music/tools.d.ts +3 -0
- package/dist/music/tools.js +143 -0
- package/dist/music/tools.js.map +1 -0
- package/dist/notes/prompts.js +1 -6
- package/dist/notes/prompts.js.map +1 -1
- package/dist/notes/scripts.js +1 -11
- package/dist/notes/scripts.js.map +1 -1
- package/dist/notes/tools.js +1 -11
- package/dist/notes/tools.js.map +1 -1
- package/dist/photos/scripts.d.ts +7 -0
- package/dist/photos/scripts.js +142 -0
- package/dist/photos/scripts.js.map +1 -0
- package/dist/photos/tools.d.ts +3 -0
- package/dist/photos/tools.js +158 -0
- package/dist/photos/tools.js.map +1 -0
- package/dist/reminders/prompts.d.ts +2 -0
- package/dist/reminders/prompts.js +40 -0
- package/dist/reminders/prompts.js.map +1 -0
- package/dist/reminders/scripts.d.ts +21 -0
- package/dist/reminders/scripts.js +202 -0
- package/dist/reminders/scripts.js.map +1 -0
- package/dist/reminders/tools.d.ts +3 -0
- package/dist/reminders/tools.js +267 -0
- package/dist/reminders/tools.js.map +1 -0
- package/dist/safari/scripts.d.ts +8 -0
- package/dist/safari/scripts.js +120 -0
- package/dist/safari/scripts.js.map +1 -0
- package/dist/safari/tools.d.ts +3 -0
- package/dist/safari/tools.js +129 -0
- package/dist/safari/tools.js.map +1 -0
- package/dist/shared/esc.d.ts +10 -0
- package/dist/shared/esc.js +35 -0
- package/dist/shared/esc.js.map +1 -0
- package/dist/shared/jxa.js +1 -1
- package/dist/shared/jxa.js.map +1 -1
- package/dist/shared/prompt.d.ts +11 -0
- package/dist/shared/prompt.js +8 -0
- package/dist/shared/prompt.js.map +1 -0
- package/dist/shared/resources.d.ts +5 -0
- package/dist/shared/resources.js +81 -0
- package/dist/shared/resources.js.map +1 -0
- package/dist/shared/result.d.ts +15 -0
- package/dist/shared/result.js +14 -0
- package/dist/shared/result.js.map +1 -0
- package/dist/shared/setup.d.ts +2 -0
- package/dist/shared/setup.js +44 -0
- package/dist/shared/setup.js.map +1 -0
- package/dist/shared/swift.d.ts +2 -0
- package/dist/shared/swift.js +73 -0
- package/dist/shared/swift.js.map +1 -0
- package/dist/shortcuts/scripts.d.ts +4 -0
- package/dist/shortcuts/scripts.js +47 -0
- package/dist/shortcuts/scripts.js.map +1 -0
- package/dist/shortcuts/tools.d.ts +3 -0
- package/dist/shortcuts/tools.js +66 -0
- package/dist/shortcuts/tools.js.map +1 -0
- package/dist/system/scripts.d.ts +9 -0
- package/dist/system/scripts.js +124 -0
- package/dist/system/scripts.js.map +1 -0
- package/dist/system/tools.d.ts +3 -0
- package/dist/system/tools.js +179 -0
- package/dist/system/tools.js.map +1 -0
- package/package.json +39 -5
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// JXA scripts for Apple Contacts automation.
|
|
2
|
+
import { esc } from "../shared/esc.js";
|
|
3
|
+
export function listContactsScript(limit, offset) {
|
|
4
|
+
return `
|
|
5
|
+
const Contacts = Application('Contacts');
|
|
6
|
+
const names = Contacts.people.name();
|
|
7
|
+
const ids = Contacts.people.id();
|
|
8
|
+
const total = names.length;
|
|
9
|
+
const s = Math.min(${offset}, total);
|
|
10
|
+
const e = Math.min(s + ${limit}, total);
|
|
11
|
+
const result = [];
|
|
12
|
+
for (let i = s; i < e; i++) {
|
|
13
|
+
const p = Contacts.people[i];
|
|
14
|
+
const emails = p.emails();
|
|
15
|
+
const phones = p.phones();
|
|
16
|
+
result.push({
|
|
17
|
+
id: ids[i],
|
|
18
|
+
name: names[i],
|
|
19
|
+
email: emails.length > 0 ? emails[0].value() : null,
|
|
20
|
+
phone: phones.length > 0 ? phones[0].value() : null
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
JSON.stringify({total, offset: s, returned: result.length, contacts: result});
|
|
24
|
+
`;
|
|
25
|
+
}
|
|
26
|
+
export function searchContactsScript(query, limit) {
|
|
27
|
+
return `
|
|
28
|
+
const Contacts = Application('Contacts');
|
|
29
|
+
const names = Contacts.people.name();
|
|
30
|
+
const ids = Contacts.people.id();
|
|
31
|
+
const q = '${esc(query)}'.toLowerCase();
|
|
32
|
+
const result = [];
|
|
33
|
+
for (let i = 0; i < names.length && result.length < ${limit}; i++) {
|
|
34
|
+
const p = Contacts.people[i];
|
|
35
|
+
const nameMatch = names[i] && names[i].toLowerCase().includes(q);
|
|
36
|
+
let emailMatch = false;
|
|
37
|
+
let phoneMatch = false;
|
|
38
|
+
let orgMatch = false;
|
|
39
|
+
if (!nameMatch) {
|
|
40
|
+
try {
|
|
41
|
+
const org = p.organization() || '';
|
|
42
|
+
orgMatch = org.toLowerCase().includes(q);
|
|
43
|
+
} catch(e) {}
|
|
44
|
+
}
|
|
45
|
+
if (!nameMatch && !orgMatch) {
|
|
46
|
+
try {
|
|
47
|
+
const emails = p.emails();
|
|
48
|
+
for (let e = 0; e < emails.length; e++) {
|
|
49
|
+
if ((emails[e].value() || '').toLowerCase().includes(q)) { emailMatch = true; break; }
|
|
50
|
+
}
|
|
51
|
+
} catch(e) {}
|
|
52
|
+
}
|
|
53
|
+
if (!nameMatch && !orgMatch && !emailMatch) {
|
|
54
|
+
try {
|
|
55
|
+
const phones = p.phones();
|
|
56
|
+
for (let ph = 0; ph < phones.length; ph++) {
|
|
57
|
+
if ((phones[ph].value() || '').includes(q)) { phoneMatch = true; break; }
|
|
58
|
+
}
|
|
59
|
+
} catch(e) {}
|
|
60
|
+
}
|
|
61
|
+
if (nameMatch || emailMatch || phoneMatch || orgMatch) {
|
|
62
|
+
const emails = p.emails();
|
|
63
|
+
const phones = p.phones();
|
|
64
|
+
result.push({
|
|
65
|
+
id: ids[i],
|
|
66
|
+
name: names[i],
|
|
67
|
+
organization: p.organization() || null,
|
|
68
|
+
email: emails.length > 0 ? emails[0].value() : null,
|
|
69
|
+
phone: phones.length > 0 ? phones[0].value() : null,
|
|
70
|
+
matchedField: nameMatch ? 'name' : orgMatch ? 'organization' : emailMatch ? 'email' : 'phone'
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
JSON.stringify({total: names.length, returned: result.length, contacts: result});
|
|
75
|
+
`;
|
|
76
|
+
}
|
|
77
|
+
export function readContactScript(id) {
|
|
78
|
+
return `
|
|
79
|
+
const Contacts = Application('Contacts');
|
|
80
|
+
const p = Contacts.people.byId('${esc(id)}');
|
|
81
|
+
const emails = p.emails();
|
|
82
|
+
const phones = p.phones();
|
|
83
|
+
const addresses = p.addresses();
|
|
84
|
+
JSON.stringify({
|
|
85
|
+
id: p.id(),
|
|
86
|
+
name: p.name(),
|
|
87
|
+
firstName: p.firstName(),
|
|
88
|
+
lastName: p.lastName(),
|
|
89
|
+
organization: p.organization(),
|
|
90
|
+
jobTitle: p.jobTitle(),
|
|
91
|
+
department: p.department(),
|
|
92
|
+
note: p.note(),
|
|
93
|
+
emails: emails.map(e => ({value: e.value(), label: e.label()})),
|
|
94
|
+
phones: phones.map(ph => ({value: ph.value(), label: ph.label()})),
|
|
95
|
+
addresses: addresses.map(a => ({
|
|
96
|
+
street: a.street(),
|
|
97
|
+
city: a.city(),
|
|
98
|
+
state: a.state(),
|
|
99
|
+
zip: a.zip(),
|
|
100
|
+
country: a.country(),
|
|
101
|
+
label: a.label()
|
|
102
|
+
})),
|
|
103
|
+
creationDate: p.creationDate().toISOString(),
|
|
104
|
+
modificationDate: p.modificationDate().toISOString()
|
|
105
|
+
});
|
|
106
|
+
`;
|
|
107
|
+
}
|
|
108
|
+
export function createContactScript(firstName, lastName, opts) {
|
|
109
|
+
const props = [
|
|
110
|
+
`firstName: '${esc(firstName)}'`,
|
|
111
|
+
`lastName: '${esc(lastName)}'`,
|
|
112
|
+
];
|
|
113
|
+
if (opts.organization)
|
|
114
|
+
props.push(`organization: '${esc(opts.organization)}'`);
|
|
115
|
+
if (opts.jobTitle)
|
|
116
|
+
props.push(`jobTitle: '${esc(opts.jobTitle)}'`);
|
|
117
|
+
if (opts.note)
|
|
118
|
+
props.push(`note: '${esc(opts.note)}'`);
|
|
119
|
+
const emailLine = opts.email
|
|
120
|
+
? `p.emails.push(Contacts.Email({value: '${esc(opts.email)}', label: 'work'}));`
|
|
121
|
+
: "";
|
|
122
|
+
const phoneLine = opts.phone
|
|
123
|
+
? `p.phones.push(Contacts.Phone({value: '${esc(opts.phone)}', label: 'mobile'}));`
|
|
124
|
+
: "";
|
|
125
|
+
return `
|
|
126
|
+
const Contacts = Application('Contacts');
|
|
127
|
+
const p = Contacts.Person({${props.join(", ")}});
|
|
128
|
+
Contacts.people.push(p);
|
|
129
|
+
${emailLine}
|
|
130
|
+
${phoneLine}
|
|
131
|
+
Contacts.save();
|
|
132
|
+
JSON.stringify({id: p.id(), name: p.name()});
|
|
133
|
+
`;
|
|
134
|
+
}
|
|
135
|
+
export function updateContactScript(id, updates) {
|
|
136
|
+
const lines = [];
|
|
137
|
+
if (updates.firstName !== undefined)
|
|
138
|
+
lines.push(`p.firstName = '${esc(updates.firstName)}';`);
|
|
139
|
+
if (updates.lastName !== undefined)
|
|
140
|
+
lines.push(`p.lastName = '${esc(updates.lastName)}';`);
|
|
141
|
+
if (updates.organization !== undefined)
|
|
142
|
+
lines.push(`p.organization = '${esc(updates.organization)}';`);
|
|
143
|
+
if (updates.jobTitle !== undefined)
|
|
144
|
+
lines.push(`p.jobTitle = '${esc(updates.jobTitle)}';`);
|
|
145
|
+
if (updates.note !== undefined)
|
|
146
|
+
lines.push(`p.note = '${esc(updates.note)}';`);
|
|
147
|
+
return `
|
|
148
|
+
const Contacts = Application('Contacts');
|
|
149
|
+
const p = Contacts.people.byId('${esc(id)}');
|
|
150
|
+
${lines.join("\n ")}
|
|
151
|
+
Contacts.save();
|
|
152
|
+
JSON.stringify({id: p.id(), name: p.name()});
|
|
153
|
+
`;
|
|
154
|
+
}
|
|
155
|
+
export function deleteContactScript(id) {
|
|
156
|
+
return `
|
|
157
|
+
const Contacts = Application('Contacts');
|
|
158
|
+
const p = Contacts.people.byId('${esc(id)}');
|
|
159
|
+
const name = p.name();
|
|
160
|
+
Contacts.delete(p);
|
|
161
|
+
Contacts.save();
|
|
162
|
+
JSON.stringify({deleted: true, name: name});
|
|
163
|
+
`;
|
|
164
|
+
}
|
|
165
|
+
export function listGroupsScript() {
|
|
166
|
+
return `
|
|
167
|
+
const Contacts = Application('Contacts');
|
|
168
|
+
const names = Contacts.groups.name();
|
|
169
|
+
const ids = Contacts.groups.id();
|
|
170
|
+
const result = names.map((name, i) => ({
|
|
171
|
+
id: ids[i],
|
|
172
|
+
name: name
|
|
173
|
+
}));
|
|
174
|
+
JSON.stringify(result);
|
|
175
|
+
`;
|
|
176
|
+
}
|
|
177
|
+
export function addContactEmailScript(id, email, label) {
|
|
178
|
+
return `
|
|
179
|
+
const Contacts = Application('Contacts');
|
|
180
|
+
const p = Contacts.people.byId('${esc(id)}');
|
|
181
|
+
const e = Contacts.Email({value: '${esc(email)}', label: '${esc(label)}'});
|
|
182
|
+
p.emails.push(e);
|
|
183
|
+
Contacts.save();
|
|
184
|
+
JSON.stringify({id: p.id(), name: p.name(), addedEmail: '${esc(email)}'});
|
|
185
|
+
`;
|
|
186
|
+
}
|
|
187
|
+
export function addContactPhoneScript(id, phone, label) {
|
|
188
|
+
return `
|
|
189
|
+
const Contacts = Application('Contacts');
|
|
190
|
+
const p = Contacts.people.byId('${esc(id)}');
|
|
191
|
+
const ph = Contacts.Phone({value: '${esc(phone)}', label: '${esc(label)}'});
|
|
192
|
+
p.phones.push(ph);
|
|
193
|
+
Contacts.save();
|
|
194
|
+
JSON.stringify({id: p.id(), name: p.name(), addedPhone: '${esc(phone)}'});
|
|
195
|
+
`;
|
|
196
|
+
}
|
|
197
|
+
export function listGroupMembersScript(groupName, limit) {
|
|
198
|
+
return `
|
|
199
|
+
const Contacts = Application('Contacts');
|
|
200
|
+
const groups = Contacts.groups.whose({name: '${esc(groupName)}'})();
|
|
201
|
+
if (groups.length === 0) throw new Error('Group not found: ${esc(groupName)}');
|
|
202
|
+
const g = groups[0];
|
|
203
|
+
const people = g.people();
|
|
204
|
+
const count = Math.min(people.length, ${limit});
|
|
205
|
+
const result = [];
|
|
206
|
+
for (let i = 0; i < count; i++) {
|
|
207
|
+
const p = people[i];
|
|
208
|
+
const emails = p.emails();
|
|
209
|
+
const phones = p.phones();
|
|
210
|
+
result.push({
|
|
211
|
+
id: p.id(),
|
|
212
|
+
name: p.name(),
|
|
213
|
+
email: emails.length > 0 ? emails[0].value() : null,
|
|
214
|
+
phone: phones.length > 0 ? phones[0].value() : null
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
JSON.stringify({group: '${esc(groupName)}', total: people.length, returned: result.length, contacts: result});
|
|
218
|
+
`;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/contacts/scripts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { runJxa } from "../shared/jxa.js";
|
|
3
|
+
import { ok, err } from "../shared/result.js";
|
|
4
|
+
import { listContactsScript, searchContactsScript, readContactScript, createContactScript, updateContactScript, deleteContactScript, listGroupsScript, addContactEmailScript, addContactPhoneScript, listGroupMembersScript, } from "./scripts.js";
|
|
5
|
+
export function registerContactTools(server, _config) {
|
|
6
|
+
server.registerTool("list_contacts", {
|
|
7
|
+
title: "List Contacts",
|
|
8
|
+
description: "List contacts with name, primary email, and phone. Supports pagination.",
|
|
9
|
+
inputSchema: {
|
|
10
|
+
limit: z.number().int().min(1).max(1000).optional().default(100).describe("Max contacts (default: 100)"),
|
|
11
|
+
offset: z.number().int().min(0).optional().default(0).describe("Skip N contacts (default: 0)"),
|
|
12
|
+
},
|
|
13
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
14
|
+
}, async ({ limit, offset }) => {
|
|
15
|
+
try {
|
|
16
|
+
return ok(await runJxa(listContactsScript(limit, offset)));
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
return err(`Failed to list contacts: ${e instanceof Error ? e.message : String(e)}`);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
server.registerTool("search_contacts", {
|
|
23
|
+
title: "Search Contacts",
|
|
24
|
+
description: "Search contacts by name, email, phone, or organization.",
|
|
25
|
+
inputSchema: {
|
|
26
|
+
query: z.string().describe("Search keyword (matches name)"),
|
|
27
|
+
limit: z.number().int().min(1).max(500).optional().default(50).describe("Max results (default: 50)"),
|
|
28
|
+
},
|
|
29
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
30
|
+
}, async ({ query, limit }) => {
|
|
31
|
+
try {
|
|
32
|
+
return ok(await runJxa(searchContactsScript(query, limit)));
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
return err(`Failed to search contacts: ${e instanceof Error ? e.message : String(e)}`);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
server.registerTool("read_contact", {
|
|
39
|
+
title: "Read Contact",
|
|
40
|
+
description: "Read full details of a contact by ID including all emails, phones, and addresses.",
|
|
41
|
+
inputSchema: {
|
|
42
|
+
id: z.string().describe("Contact ID"),
|
|
43
|
+
},
|
|
44
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
45
|
+
}, async ({ id }) => {
|
|
46
|
+
try {
|
|
47
|
+
return ok(await runJxa(readContactScript(id)));
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
return err(`Failed to read contact: ${e instanceof Error ? e.message : String(e)}`);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
server.registerTool("create_contact", {
|
|
54
|
+
title: "Create Contact",
|
|
55
|
+
description: "Create a new contact with name and optional email, phone, organization.",
|
|
56
|
+
inputSchema: {
|
|
57
|
+
firstName: z.string().describe("First name"),
|
|
58
|
+
lastName: z.string().describe("Last name"),
|
|
59
|
+
email: z.string().optional().describe("Email address"),
|
|
60
|
+
phone: z.string().optional().describe("Phone number"),
|
|
61
|
+
organization: z.string().optional().describe("Company/organization"),
|
|
62
|
+
jobTitle: z.string().optional().describe("Job title"),
|
|
63
|
+
note: z.string().optional().describe("Notes"),
|
|
64
|
+
},
|
|
65
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
66
|
+
}, async ({ firstName, lastName, email, phone, organization, jobTitle, note }) => {
|
|
67
|
+
try {
|
|
68
|
+
return ok(await runJxa(createContactScript(firstName, lastName, { email, phone, organization, jobTitle, note })));
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
return err(`Failed to create contact: ${e instanceof Error ? e.message : String(e)}`);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
server.registerTool("update_contact", {
|
|
75
|
+
title: "Update Contact",
|
|
76
|
+
description: "Update contact properties. Only specified fields are changed.",
|
|
77
|
+
inputSchema: {
|
|
78
|
+
id: z.string().describe("Contact ID"),
|
|
79
|
+
firstName: z.string().optional().describe("New first name"),
|
|
80
|
+
lastName: z.string().optional().describe("New last name"),
|
|
81
|
+
organization: z.string().optional().describe("New organization"),
|
|
82
|
+
jobTitle: z.string().optional().describe("New job title"),
|
|
83
|
+
note: z.string().optional().describe("New notes"),
|
|
84
|
+
},
|
|
85
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: false },
|
|
86
|
+
}, async ({ id, firstName, lastName, organization, jobTitle, note }) => {
|
|
87
|
+
try {
|
|
88
|
+
return ok(await runJxa(updateContactScript(id, { firstName, lastName, organization, jobTitle, note })));
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
return err(`Failed to update contact: ${e instanceof Error ? e.message : String(e)}`);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
server.registerTool("delete_contact", {
|
|
95
|
+
title: "Delete Contact",
|
|
96
|
+
description: "Delete a contact by ID. This action is permanent.",
|
|
97
|
+
inputSchema: {
|
|
98
|
+
id: z.string().describe("Contact ID"),
|
|
99
|
+
},
|
|
100
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: false },
|
|
101
|
+
}, async ({ id }) => {
|
|
102
|
+
try {
|
|
103
|
+
return ok(await runJxa(deleteContactScript(id)));
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
return err(`Failed to delete contact: ${e instanceof Error ? e.message : String(e)}`);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
server.registerTool("list_groups", {
|
|
110
|
+
title: "List Contact Groups",
|
|
111
|
+
description: "List all contact groups.",
|
|
112
|
+
inputSchema: {},
|
|
113
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
114
|
+
}, async () => {
|
|
115
|
+
try {
|
|
116
|
+
return ok(await runJxa(listGroupsScript()));
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
return err(`Failed to list groups: ${e instanceof Error ? e.message : String(e)}`);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
server.registerTool("add_contact_email", {
|
|
123
|
+
title: "Add Contact Email",
|
|
124
|
+
description: "Add an email address to an existing contact.",
|
|
125
|
+
inputSchema: {
|
|
126
|
+
id: z.string().describe("Contact ID"),
|
|
127
|
+
email: z.string().describe("Email address to add"),
|
|
128
|
+
label: z.string().optional().default("work").describe("Email label (default: work)"),
|
|
129
|
+
},
|
|
130
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
131
|
+
}, async ({ id, email, label }) => {
|
|
132
|
+
try {
|
|
133
|
+
return ok(await runJxa(addContactEmailScript(id, email, label)));
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
return err(`Failed to add email to contact: ${e instanceof Error ? e.message : String(e)}`);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
server.registerTool("add_contact_phone", {
|
|
140
|
+
title: "Add Contact Phone",
|
|
141
|
+
description: "Add a phone number to an existing contact.",
|
|
142
|
+
inputSchema: {
|
|
143
|
+
id: z.string().describe("Contact ID"),
|
|
144
|
+
phone: z.string().describe("Phone number to add"),
|
|
145
|
+
label: z.string().optional().default("mobile").describe("Phone label (default: mobile)"),
|
|
146
|
+
},
|
|
147
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
148
|
+
}, async ({ id, phone, label }) => {
|
|
149
|
+
try {
|
|
150
|
+
return ok(await runJxa(addContactPhoneScript(id, phone, label)));
|
|
151
|
+
}
|
|
152
|
+
catch (e) {
|
|
153
|
+
return err(`Failed to add phone to contact: ${e instanceof Error ? e.message : String(e)}`);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
server.registerTool("list_group_members", {
|
|
157
|
+
title: "List Group Members",
|
|
158
|
+
description: "List contacts in a specific group.",
|
|
159
|
+
inputSchema: {
|
|
160
|
+
groupName: z.string().describe("Group name"),
|
|
161
|
+
limit: z.number().int().min(1).max(1000).optional().default(100).describe("Max contacts (default: 100)"),
|
|
162
|
+
},
|
|
163
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
164
|
+
}, async ({ groupName, limit }) => {
|
|
165
|
+
try {
|
|
166
|
+
return ok(await runJxa(listGroupMembersScript(groupName, limit)));
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
return err(`Failed to list group members: ${e instanceof Error ? e.message : String(e)}`);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/contacts/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { userPrompt } from "../shared/prompt.js";
|
|
3
|
+
export function registerCrossPrompts(server) {
|
|
4
|
+
server.prompt("meeting-notes-to-reminders", { eventId: z.string().describe("Calendar event ID to extract action items from") }, ({ eventId }) => {
|
|
5
|
+
return userPrompt("Extract action items from meeting notes and create reminders.", `미팅 메모에서 할 일을 추출해서 리마인더로 만들어줘.
|
|
6
|
+
|
|
7
|
+
다음 단계를 반드시 iMcp 도구를 사용해서 실행해:
|
|
8
|
+
|
|
9
|
+
1. read_event(id: "${eventId}")로 이벤트 정보를 확인해
|
|
10
|
+
2. search_notes로 이벤트 제목/참석자 관련 메모를 검색해
|
|
11
|
+
3. 찾은 메모를 read_note로 전체 내용을 읽어
|
|
12
|
+
4. 메모 내용에서 할 일(action item)을 추출해:
|
|
13
|
+
- "~해야 함", "TODO", "follow up", "확인 필요" 등의 패턴
|
|
14
|
+
- 담당자가 명시된 항목
|
|
15
|
+
- 기한이 언급된 항목
|
|
16
|
+
5. 추출한 항목을 나에게 보여주고 확인을 받아
|
|
17
|
+
6. 확인 후 create_reminder로 각 항목을 리마인더로 생성해:
|
|
18
|
+
- 제목: 할 일 내용
|
|
19
|
+
- body: 원본 메모 참조
|
|
20
|
+
- dueDate: 언급된 기한 (없으면 이벤트 다음 날)
|
|
21
|
+
|
|
22
|
+
중요: 삭제/수정 전에 반드시 확인을 받아.`);
|
|
23
|
+
});
|
|
24
|
+
server.prompt("weekly-digest", { days: z.number().int().min(1).max(30).optional().describe("Days to review (default: 7)") }, ({ days }) => {
|
|
25
|
+
const n = days ?? 7;
|
|
26
|
+
const since = new Date(Date.now() - n * 24 * 60 * 60 * 1000).toISOString();
|
|
27
|
+
const until = new Date().toISOString();
|
|
28
|
+
return userPrompt(`Digest of the past ${n} days: notes, events, and reminders combined.`, `지난 ${n}일간의 Apple 생태계 전체 요약을 해줘.
|
|
29
|
+
|
|
30
|
+
다음 단계를 반드시 iMcp 도구를 사용해서 실행해:
|
|
31
|
+
|
|
32
|
+
1. **캘린더**: list_events(startDate: "${since}", endDate: "${until}")로 지난 이벤트 조회
|
|
33
|
+
2. **메모**: scan_notes로 메모를 스캔하고 ${since} 이후 생성/수정된 것만 필터링
|
|
34
|
+
3. **리마인더**: list_reminders(completed: true)로 완료된 리마인더 + list_reminders(completed: false)로 미완료 조회
|
|
35
|
+
4. 종합 분석:
|
|
36
|
+
- 이번 주 주요 이벤트/미팅 요약
|
|
37
|
+
- 새로 작성된 메모 주제 분류
|
|
38
|
+
- 완료한 리마인더 성과
|
|
39
|
+
- 아직 미완료인 리마인더 현황
|
|
40
|
+
- 기한 지난(overdue) 항목 경고
|
|
41
|
+
5. 다음 주 제안:
|
|
42
|
+
- 정리가 필요한 메모
|
|
43
|
+
- 일정 조정 제안
|
|
44
|
+
- 우선 처리할 리마인더
|
|
45
|
+
|
|
46
|
+
중요: 실제 iMcp 도구를 사용해서 Apple Notes, Calendar, Reminders 데이터를 조회해.`);
|
|
47
|
+
});
|
|
48
|
+
server.prompt("event-follow-up", { eventId: z.string().describe("Calendar event ID") }, ({ eventId }) => {
|
|
49
|
+
return userPrompt("Create follow-up note and reminders after a meeting.", `미팅 후 팔로업을 정리해줘.
|
|
50
|
+
|
|
51
|
+
다음 단계를 반드시 iMcp 도구를 사용해서 실행해:
|
|
52
|
+
|
|
53
|
+
1. read_event(id: "${eventId}")로 이벤트 정보를 확인해
|
|
54
|
+
2. 이벤트 제목, 참석자, 시간을 파악해
|
|
55
|
+
3. 나에게 미팅 결과를 물어봐 (주요 논의 사항, 결정 사항, 다음 단계)
|
|
56
|
+
4. 내 답변을 기반으로:
|
|
57
|
+
a. create_note로 미팅 노트를 생성해 (제목: "[미팅 노트] {이벤트 제목} - {날짜}")
|
|
58
|
+
- 참석자 목록
|
|
59
|
+
- 주요 논의 사항
|
|
60
|
+
- 결정 사항
|
|
61
|
+
- Action Items
|
|
62
|
+
b. 각 action item을 create_reminder로 생성해
|
|
63
|
+
5. 생성된 메모와 리마인더를 확인해줘
|
|
64
|
+
|
|
65
|
+
중요: 미팅 내용은 나에게 물어보고, 자의적으로 작성하지 마.`);
|
|
66
|
+
});
|
|
67
|
+
server.prompt("daily-briefing", "Comprehensive daily briefing with today's events, due reminders, and recent notes.", () => {
|
|
68
|
+
const today = new Date();
|
|
69
|
+
const todayStart = new Date(today.getFullYear(), today.getMonth(), today.getDate()).toISOString();
|
|
70
|
+
const todayEnd = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1).toISOString();
|
|
71
|
+
const dateStr = today.toISOString().split("T")[0];
|
|
72
|
+
return userPrompt("Daily briefing: today's events, due reminders, and recent notes.", `오늘(${dateStr})의 데일리 브리핑을 해줘.
|
|
73
|
+
|
|
74
|
+
다음 단계를 반드시 iMcp 도구를 사용해서 실행해:
|
|
75
|
+
|
|
76
|
+
1. **오늘 일정**: list_events(startDate: "${todayStart}", endDate: "${todayEnd}")
|
|
77
|
+
2. **마감 리마인더**: list_reminders(completed: false) → 오늘 마감 + overdue 필터링
|
|
78
|
+
3. **최근 메모**: scan_notes로 스캔 → 어제/오늘 수정된 메모 필터링
|
|
79
|
+
|
|
80
|
+
다음 형식으로 정리해:
|
|
81
|
+
|
|
82
|
+
📅 **오늘 일정**
|
|
83
|
+
- 시간순으로 이벤트 나열
|
|
84
|
+
- 빈 시간대 표시
|
|
85
|
+
|
|
86
|
+
⏰ **마감/긴급**
|
|
87
|
+
- 🔴 기한 지남
|
|
88
|
+
- 🟡 오늘 마감
|
|
89
|
+
- 🟢 내일까지
|
|
90
|
+
|
|
91
|
+
📝 **최근 메모**
|
|
92
|
+
- 어제/오늘 작성/수정된 메모 요약
|
|
93
|
+
|
|
94
|
+
💡 **오늘의 제안**
|
|
95
|
+
- 우선 처리 항목
|
|
96
|
+
- 준비가 필요한 미팅
|
|
97
|
+
|
|
98
|
+
중요: 실제 iMcp 도구를 사용해서 데이터를 조회해.`);
|
|
99
|
+
});
|
|
100
|
+
server.prompt("research-with-safari", { topic: z.string().describe("Research topic to investigate") }, ({ topic }) => {
|
|
101
|
+
return userPrompt("Safari + Notes research workflow: search tabs, read content, compile findings into a note.", `"${topic}" 주제로 리서치를 진행해줘.
|
|
102
|
+
|
|
103
|
+
다음 단계를 반드시 iMcp 도구를 사용해서 실행해:
|
|
104
|
+
|
|
105
|
+
1. **Safari 탭 검색**: list_tabs로 현재 열린 Safari 탭 목록을 확인해
|
|
106
|
+
2. **관련 탭 읽기**: "${topic}"과 관련된 탭을 찾아서 read_page_content로 페이지 내용을 읽어
|
|
107
|
+
3. **기존 메모 검색**: search_notes로 "${topic}" 관련 기존 메모가 있는지 확인해
|
|
108
|
+
4. **리서치 노트 작성**: create_note로 리서치 결과를 정리한 노트를 생성해:
|
|
109
|
+
- 제목: "[리서치] ${topic} - {날짜}"
|
|
110
|
+
- 주요 발견 사항 요약
|
|
111
|
+
- 각 소스의 핵심 내용
|
|
112
|
+
- 출처 (Safari 탭 URL 목록)
|
|
113
|
+
- 기존 메모와의 연관성 (있으면)
|
|
114
|
+
5. 추가 조사가 필요한 부분이 있으면 알려줘
|
|
115
|
+
|
|
116
|
+
중요: Safari 탭의 URL을 출처로 반드시 포함해.`);
|
|
117
|
+
});
|
|
118
|
+
server.prompt("focus-session", { duration: z.number().optional().describe("Focus duration in hours (default: 2)") }, ({ duration }) => {
|
|
119
|
+
const hours = duration ?? 2;
|
|
120
|
+
const now = new Date();
|
|
121
|
+
const endTime = new Date(now.getTime() + hours * 60 * 60 * 1000);
|
|
122
|
+
const nowISO = now.toISOString();
|
|
123
|
+
const endISO = endTime.toISOString();
|
|
124
|
+
return userPrompt(`Set up a ${hours}-hour focus session: check calendar, prioritize reminders, manage music.`, `${hours}시간 집중 세션을 설정해줘.
|
|
125
|
+
|
|
126
|
+
다음 단계를 반드시 iMcp 도구를 사용해서 실행해:
|
|
127
|
+
|
|
128
|
+
1. **일정 확인**: list_events(startDate: "${nowISO}", endDate: "${endISO}")로 집중 시간 내 일정 확인
|
|
129
|
+
2. **리마인더 확인**: list_reminders(completed: false)로 미완료 리마인더 조회
|
|
130
|
+
3. **음악 상태**: now_playing으로 현재 재생 중인 음악 확인
|
|
131
|
+
4. 분석 결과를 정리해:
|
|
132
|
+
|
|
133
|
+
⏰ **집중 세션 정보**
|
|
134
|
+
- 시작: 지금부터
|
|
135
|
+
- 종료: ${hours}시간 후
|
|
136
|
+
|
|
137
|
+
⚠️ **방해 요소 경고**
|
|
138
|
+
- 집중 시간 내 예정된 미팅/이벤트가 있으면 경고
|
|
139
|
+
- 미팅 시작 전 알림 시간도 고려
|
|
140
|
+
|
|
141
|
+
✅ **집중 시간 동안 할 일**
|
|
142
|
+
- 마감이 임박한 리마인더 우선 정리
|
|
143
|
+
- 중요도/긴급도 기준으로 우선순위 제안
|
|
144
|
+
|
|
145
|
+
🎵 **음악**
|
|
146
|
+
- 현재 재생 상태 안내
|
|
147
|
+
- 음악을 틀거나 변경하고 싶으면 playback_control 사용 가능
|
|
148
|
+
|
|
149
|
+
중요: 집중 시간 내 미팅이 있으면 반드시 경고해줘.`);
|
|
150
|
+
});
|
|
151
|
+
server.prompt("file-organizer", { directory: z.string().describe("Directory path to organize") }, ({ directory }) => {
|
|
152
|
+
return userPrompt("Finder + Notes file organization: scan directory, apply tags, and create summary note.", `"${directory}" 폴더의 파일을 정리해줘.
|
|
153
|
+
|
|
154
|
+
다음 단계를 반드시 iMcp 도구를 사용해서 실행해:
|
|
155
|
+
|
|
156
|
+
1. **파일 검색**: search_files로 "${directory}" 내 파일 목록을 확인해
|
|
157
|
+
2. **파일 정보 확인**: get_file_info로 주요 파일의 상세 정보(크기, 생성일, 수정일 등)를 확인해
|
|
158
|
+
3. **정리 규칙 확인**: search_notes로 파일 정리 관련 규칙이나 메모가 있는지 검색해
|
|
159
|
+
4. 파일 분석 결과를 보여줘:
|
|
160
|
+
- 파일 유형별 분류 (문서, 이미지, 코드 등)
|
|
161
|
+
- 크기별 정리 (큰 파일 경고)
|
|
162
|
+
- 오래된 파일 목록
|
|
163
|
+
- 중복 가능성이 있는 파일
|
|
164
|
+
5. **태그 제안**: set_file_tags로 파일에 태그를 지정할 수 있어:
|
|
165
|
+
- 유형별 태그 (예: "문서", "이미지", "프로젝트")
|
|
166
|
+
- 상태별 태그 (예: "정리 필요", "보관", "삭제 검토")
|
|
167
|
+
- 나에게 태그 적용 확인을 받아
|
|
168
|
+
6. **정리 결과 노트**: create_note로 정리 결과를 요약한 노트 생성:
|
|
169
|
+
- 제목: "[파일 정리] ${directory} - {날짜}"
|
|
170
|
+
- 파일 현황 요약
|
|
171
|
+
- 적용한 태그 목록
|
|
172
|
+
- 추가 정리 제안
|
|
173
|
+
|
|
174
|
+
중요: 파일 삭제/이동은 하지 말고, 태그 적용 전에 반드시 확인을 받아.`);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/cross/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function searchFilesScript(folder: string, query: string, limit: number): string;
|
|
2
|
+
export declare function getFileInfoScript(path: string): string;
|
|
3
|
+
export declare function setTagsScript(path: string, tags: string[]): string;
|
|
4
|
+
export declare function recentFilesScript(folder: string, days: number, limit: number): string;
|
|
5
|
+
export declare function listDirectoryScript(path: string, limit: number): string;
|
|
6
|
+
export declare function moveFileScript(source: string, destination: string): string;
|
|
7
|
+
export declare function trashFileScript(path: string): string;
|
|
8
|
+
export declare function createFolderScript(path: string): string;
|