@heznpc/imcp 0.1.0 → 0.5.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.
Files changed (101) hide show
  1. package/LICENSE +21 -0
  2. package/README.ko.md +218 -57
  3. package/README.md +215 -30
  4. package/dist/calendar/prompts.d.ts +2 -0
  5. package/dist/calendar/prompts.js +43 -0
  6. package/dist/calendar/prompts.js.map +1 -0
  7. package/dist/calendar/scripts.d.ts +20 -0
  8. package/dist/calendar/scripts.js +283 -0
  9. package/dist/calendar/scripts.js.map +1 -0
  10. package/dist/calendar/tools.d.ts +3 -0
  11. package/dist/calendar/tools.js +210 -0
  12. package/dist/calendar/tools.js.map +1 -0
  13. package/dist/contacts/scripts.d.ts +22 -0
  14. package/dist/contacts/scripts.js +192 -0
  15. package/dist/contacts/scripts.js.map +1 -0
  16. package/dist/contacts/tools.d.ts +3 -0
  17. package/dist/contacts/tools.js +173 -0
  18. package/dist/contacts/tools.js.map +1 -0
  19. package/dist/cross/prompts.d.ts +2 -0
  20. package/dist/cross/prompts.js +177 -0
  21. package/dist/cross/prompts.js.map +1 -0
  22. package/dist/finder/scripts.d.ts +8 -0
  23. package/dist/finder/scripts.js +127 -0
  24. package/dist/finder/scripts.js.map +1 -0
  25. package/dist/finder/tools.d.ts +3 -0
  26. package/dist/finder/tools.js +134 -0
  27. package/dist/finder/tools.js.map +1 -0
  28. package/dist/index.js +35 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/intelligence/tools.d.ts +3 -0
  31. package/dist/intelligence/tools.js +74 -0
  32. package/dist/intelligence/tools.js.map +1 -0
  33. package/dist/mail/scripts.d.ts +9 -0
  34. package/dist/mail/scripts.js +214 -0
  35. package/dist/mail/scripts.js.map +1 -0
  36. package/dist/mail/tools.d.ts +3 -0
  37. package/dist/mail/tools.js +144 -0
  38. package/dist/mail/tools.js.map +1 -0
  39. package/dist/music/scripts.d.ts +9 -0
  40. package/dist/music/scripts.js +180 -0
  41. package/dist/music/scripts.js.map +1 -0
  42. package/dist/music/tools.d.ts +3 -0
  43. package/dist/music/tools.js +143 -0
  44. package/dist/music/tools.js.map +1 -0
  45. package/dist/notes/prompts.js +1 -6
  46. package/dist/notes/prompts.js.map +1 -1
  47. package/dist/notes/scripts.js +1 -11
  48. package/dist/notes/scripts.js.map +1 -1
  49. package/dist/notes/tools.js +1 -11
  50. package/dist/notes/tools.js.map +1 -1
  51. package/dist/photos/scripts.d.ts +7 -0
  52. package/dist/photos/scripts.js +142 -0
  53. package/dist/photos/scripts.js.map +1 -0
  54. package/dist/photos/tools.d.ts +3 -0
  55. package/dist/photos/tools.js +114 -0
  56. package/dist/photos/tools.js.map +1 -0
  57. package/dist/reminders/prompts.d.ts +2 -0
  58. package/dist/reminders/prompts.js +40 -0
  59. package/dist/reminders/prompts.js.map +1 -0
  60. package/dist/reminders/scripts.d.ts +21 -0
  61. package/dist/reminders/scripts.js +202 -0
  62. package/dist/reminders/scripts.js.map +1 -0
  63. package/dist/reminders/tools.d.ts +3 -0
  64. package/dist/reminders/tools.js +227 -0
  65. package/dist/reminders/tools.js.map +1 -0
  66. package/dist/safari/scripts.d.ts +8 -0
  67. package/dist/safari/scripts.js +120 -0
  68. package/dist/safari/scripts.js.map +1 -0
  69. package/dist/safari/tools.d.ts +3 -0
  70. package/dist/safari/tools.js +129 -0
  71. package/dist/safari/tools.js.map +1 -0
  72. package/dist/shared/esc.d.ts +10 -0
  73. package/dist/shared/esc.js +35 -0
  74. package/dist/shared/esc.js.map +1 -0
  75. package/dist/shared/jxa.js +1 -1
  76. package/dist/shared/jxa.js.map +1 -1
  77. package/dist/shared/prompt.d.ts +11 -0
  78. package/dist/shared/prompt.js +8 -0
  79. package/dist/shared/prompt.js.map +1 -0
  80. package/dist/shared/resources.d.ts +5 -0
  81. package/dist/shared/resources.js +81 -0
  82. package/dist/shared/resources.js.map +1 -0
  83. package/dist/shared/result.d.ts +15 -0
  84. package/dist/shared/result.js +14 -0
  85. package/dist/shared/result.js.map +1 -0
  86. package/dist/shared/swift.d.ts +2 -0
  87. package/dist/shared/swift.js +73 -0
  88. package/dist/shared/swift.js.map +1 -0
  89. package/dist/shortcuts/scripts.d.ts +4 -0
  90. package/dist/shortcuts/scripts.js +47 -0
  91. package/dist/shortcuts/scripts.js.map +1 -0
  92. package/dist/shortcuts/tools.d.ts +3 -0
  93. package/dist/shortcuts/tools.js +66 -0
  94. package/dist/shortcuts/tools.js.map +1 -0
  95. package/dist/system/scripts.d.ts +9 -0
  96. package/dist/system/scripts.js +124 -0
  97. package/dist/system/scripts.js.map +1 -0
  98. package/dist/system/tools.d.ts +3 -0
  99. package/dist/system/tools.js +179 -0
  100. package/dist/system/tools.js.map +1 -0
  101. package/package.json +39 -5
@@ -0,0 +1,43 @@
1
+ import { z } from "zod";
2
+ import { userPrompt } from "../shared/prompt.js";
3
+ export function registerCalendarPrompts(server) {
4
+ server.prompt("schedule-review", { days: z.number().int().min(1).max(90).optional().describe("Number of days ahead to review (default: 7)") }, ({ days }) => {
5
+ const n = days ?? 7;
6
+ const start = new Date().toISOString();
7
+ const end = new Date(Date.now() + n * 24 * 60 * 60 * 1000).toISOString();
8
+ return userPrompt(`Review upcoming ${n} days of events, identify conflicts, and suggest optimizations.`, `앞으로 ${n}일간의 캘린더 일정을 리뷰해줘.
9
+
10
+ 다음 단계를 반드시 iMcp 도구를 사용해서 실행해:
11
+
12
+ 1. list_calendars로 모든 캘린더를 확인해
13
+ 2. list_events(startDate: "${start}", endDate: "${end}")로 일정을 조회해
14
+ 3. 다음 항목을 분석해:
15
+ - 시간이 겹치는 일정 (충돌)
16
+ - 연속 회의로 쉬는 시간이 없는 구간
17
+ - 빈 시간대 (여유 시간)
18
+ 4. 개선 제안을 해줘:
19
+ - 충돌 해결 방안
20
+ - 일정 재배치 제안
21
+ - 집중 업무 시간 확보 제안
22
+ 5. 내가 원하면 update_event로 일정을 수정해
23
+
24
+ 중요: 실제 iMcp 도구를 사용해서 Apple Calendar 데이터를 조회해.`);
25
+ });
26
+ server.prompt("meeting-prep", { eventId: z.string().describe("Event ID to prepare for") }, ({ eventId }) => {
27
+ return userPrompt("Read event details, find related notes, and prepare meeting context.", `미팅 준비를 도와줘.
28
+
29
+ 다음 단계를 반드시 iMcp 도구를 사용해서 실행해:
30
+
31
+ 1. read_event(id: "${eventId}")로 이벤트 상세 정보를 확인해
32
+ 2. 이벤트 제목과 참석자 정보를 파악해
33
+ 3. search_notes로 관련 메모를 검색해 (이벤트 제목, 참석자 이름으로 검색)
34
+ 4. 다음 내용을 정리해줘:
35
+ - 미팅 기본 정보 (시간, 장소, 참석자)
36
+ - 관련 메모 요약
37
+ - 준비할 사항 제안
38
+ - 예상 안건
39
+
40
+ 중요: 실제 iMcp 도구를 사용해서 Apple Calendar와 Notes 데이터를 조회해.`);
41
+ });
42
+ }
43
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/calendar/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,MAAM,CACX,iBAAiB,EACjB,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC,EAAE,EAC5G,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACX,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACzE,OAAO,UAAU,CACf,mBAAmB,CAAC,iEAAiE,EACrF,OAAO,CAAC;;;;;6BAKa,KAAK,gBAAgB,GAAG;;;;;;;;;;;8CAWP,CACvC,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,MAAM,CACX,cAAc,EACd,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,EAC3D,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QACd,OAAO,UAAU,CACf,sEAAsE,EACtE;;;;qBAIa,OAAO;;;;;;;;;qDASyB,CAC9C,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare function listCalendarsScript(): string;
2
+ export declare function listEventsScript(startDate: string, endDate: string, limit: number, offset: number, calendar?: string): string;
3
+ export declare function readEventScript(id: string): string;
4
+ export declare function createEventScript(summary: string, startDate: string, endDate: string, opts: {
5
+ location?: string;
6
+ description?: string;
7
+ calendar?: string;
8
+ allDay?: boolean;
9
+ }): string;
10
+ export declare function updateEventScript(id: string, updates: {
11
+ summary?: string;
12
+ startDate?: string;
13
+ endDate?: string;
14
+ location?: string;
15
+ description?: string;
16
+ }): string;
17
+ export declare function deleteEventScript(id: string): string;
18
+ export declare function searchEventsScript(query: string, startDate: string, endDate: string, limit: number): string;
19
+ export declare function getUpcomingEventsScript(limit: number): string;
20
+ export declare function todayEventsScript(): string;
@@ -0,0 +1,283 @@
1
+ // JXA scripts for Apple Calendar automation.
2
+ // Each function returns a JXA script string to be executed via osascript.
3
+ import { esc } from "../shared/esc.js";
4
+ export function listCalendarsScript() {
5
+ return `
6
+ const Calendar = Application('Calendar');
7
+ const cals = Calendar.calendars();
8
+ const names = Calendar.calendars.name();
9
+ const ids = Calendar.calendars.id();
10
+ const result = names.map((name, i) => ({
11
+ id: ids[i],
12
+ name: name,
13
+ color: cals[i].color(),
14
+ writable: cals[i].writable()
15
+ }));
16
+ JSON.stringify(result);
17
+ `;
18
+ }
19
+ export function listEventsScript(startDate, endDate, limit, offset, calendar) {
20
+ if (calendar) {
21
+ return `
22
+ const Calendar = Application('Calendar');
23
+ const cals = Calendar.calendars.whose({name: '${esc(calendar)}'})();
24
+ if (cals.length === 0) throw new Error('Calendar not found: ${esc(calendar)}');
25
+ const cal = cals[0];
26
+ const start = new Date('${esc(startDate)}');
27
+ const end = new Date('${esc(endDate)}');
28
+ const events = cal.events.whose({
29
+ _and: [{startDate: {_greaterThanEquals: start}}, {startDate: {_lessThanEquals: end}}]
30
+ })();
31
+ const total = events.length;
32
+ const s = Math.min(${offset}, total);
33
+ const e = Math.min(s + ${limit}, total);
34
+ const result = [];
35
+ for (let i = s; i < e; i++) {
36
+ const ev = events[i];
37
+ result.push({
38
+ id: ev.uid(),
39
+ summary: ev.summary(),
40
+ startDate: ev.startDate().toISOString(),
41
+ endDate: ev.endDate().toISOString(),
42
+ allDay: ev.alldayEvent(),
43
+ calendar: '${esc(calendar)}'
44
+ });
45
+ }
46
+ JSON.stringify({total: total, offset: s, returned: result.length, events: result});
47
+ `;
48
+ }
49
+ return `
50
+ const Calendar = Application('Calendar');
51
+ const cals = Calendar.calendars();
52
+ const start = new Date('${esc(startDate)}');
53
+ const end = new Date('${esc(endDate)}');
54
+ const all = [];
55
+ for (const cal of cals) {
56
+ const events = cal.events.whose({
57
+ _and: [{startDate: {_greaterThanEquals: start}}, {startDate: {_lessThanEquals: end}}]
58
+ })();
59
+ const calName = cal.name();
60
+ for (const ev of events) {
61
+ all.push({
62
+ id: ev.uid(),
63
+ summary: ev.summary(),
64
+ startDate: ev.startDate().toISOString(),
65
+ endDate: ev.endDate().toISOString(),
66
+ allDay: ev.alldayEvent(),
67
+ calendar: calName
68
+ });
69
+ }
70
+ }
71
+ all.sort((a, b) => new Date(a.startDate) - new Date(b.startDate));
72
+ const total = all.length;
73
+ const s = Math.min(${offset}, total);
74
+ const e = Math.min(s + ${limit}, total);
75
+ JSON.stringify({total: total, offset: s, returned: e - s, events: all.slice(s, e)});
76
+ `;
77
+ }
78
+ export function readEventScript(id) {
79
+ return `
80
+ const Calendar = Application('Calendar');
81
+ const cals = Calendar.calendars();
82
+ let found = null;
83
+ for (const cal of cals) {
84
+ const events = cal.events.whose({uid: '${esc(id)}'})();
85
+ if (events.length > 0) {
86
+ const ev = events[0];
87
+ const attendeeList = [];
88
+ try {
89
+ const attendees = ev.attendees();
90
+ for (const a of attendees) {
91
+ attendeeList.push({
92
+ name: a.displayName(),
93
+ email: a.email(),
94
+ status: a.participationStatus()
95
+ });
96
+ }
97
+ } catch(e) {}
98
+ found = {
99
+ id: ev.uid(),
100
+ summary: ev.summary(),
101
+ description: ev.description(),
102
+ location: ev.location(),
103
+ startDate: ev.startDate().toISOString(),
104
+ endDate: ev.endDate().toISOString(),
105
+ allDay: ev.alldayEvent(),
106
+ recurrence: ev.recurrence(),
107
+ url: ev.url(),
108
+ calendar: cal.name(),
109
+ attendees: attendeeList
110
+ };
111
+ break;
112
+ }
113
+ }
114
+ if (!found) throw new Error('Event not found: ${esc(id)}');
115
+ JSON.stringify(found);
116
+ `;
117
+ }
118
+ export function createEventScript(summary, startDate, endDate, opts) {
119
+ const props = [
120
+ `summary: '${esc(summary)}'`,
121
+ `startDate: new Date('${esc(startDate)}')`,
122
+ `endDate: new Date('${esc(endDate)}')`,
123
+ ];
124
+ if (opts.location)
125
+ props.push(`location: '${esc(opts.location)}'`);
126
+ if (opts.description)
127
+ props.push(`description: '${esc(opts.description)}'`);
128
+ if (opts.allDay !== undefined)
129
+ props.push(`alldayEvent: ${opts.allDay}`);
130
+ if (opts.calendar) {
131
+ return `
132
+ const Calendar = Application('Calendar');
133
+ const cals = Calendar.calendars.whose({name: '${esc(opts.calendar)}'})();
134
+ if (cals.length === 0) throw new Error('Calendar not found: ${esc(opts.calendar)}');
135
+ const ev = Calendar.Event({${props.join(", ")}});
136
+ cals[0].events.push(ev);
137
+ JSON.stringify({id: ev.uid(), summary: ev.summary()});
138
+ `;
139
+ }
140
+ return `
141
+ const Calendar = Application('Calendar');
142
+ const cals = Calendar.calendars.whose({writable: true})();
143
+ if (cals.length === 0) throw new Error('No writable calendar found');
144
+ const ev = Calendar.Event({${props.join(", ")}});
145
+ cals[0].events.push(ev);
146
+ JSON.stringify({id: ev.uid(), summary: ev.summary()});
147
+ `;
148
+ }
149
+ export function updateEventScript(id, updates) {
150
+ const lines = [];
151
+ if (updates.summary !== undefined)
152
+ lines.push(`ev.summary = '${esc(updates.summary)}';`);
153
+ if (updates.startDate !== undefined)
154
+ lines.push(`ev.startDate = new Date('${esc(updates.startDate)}');`);
155
+ if (updates.endDate !== undefined)
156
+ lines.push(`ev.endDate = new Date('${esc(updates.endDate)}');`);
157
+ if (updates.location !== undefined)
158
+ lines.push(`ev.location = '${esc(updates.location)}';`);
159
+ if (updates.description !== undefined)
160
+ lines.push(`ev.description = '${esc(updates.description)}';`);
161
+ return `
162
+ const Calendar = Application('Calendar');
163
+ const cals = Calendar.calendars();
164
+ let ev = null;
165
+ for (const cal of cals) {
166
+ const events = cal.events.whose({uid: '${esc(id)}'})();
167
+ if (events.length > 0) { ev = events[0]; break; }
168
+ }
169
+ if (!ev) throw new Error('Event not found: ${esc(id)}');
170
+ ${lines.join("\n ")}
171
+ JSON.stringify({id: ev.uid(), summary: ev.summary()});
172
+ `;
173
+ }
174
+ export function deleteEventScript(id) {
175
+ return `
176
+ const Calendar = Application('Calendar');
177
+ const cals = Calendar.calendars();
178
+ let result = null;
179
+ for (const cal of cals) {
180
+ const events = cal.events.whose({uid: '${esc(id)}'})();
181
+ if (events.length > 0) {
182
+ const summary = events[0].summary();
183
+ Calendar.delete(events[0]);
184
+ result = {deleted: true, summary: summary};
185
+ break;
186
+ }
187
+ }
188
+ if (!result) throw new Error('Event not found: ${esc(id)}');
189
+ JSON.stringify(result);
190
+ `;
191
+ }
192
+ export function searchEventsScript(query, startDate, endDate, limit) {
193
+ return `
194
+ const Calendar = Application('Calendar');
195
+ const cals = Calendar.calendars();
196
+ const start = new Date('${esc(startDate)}');
197
+ const end = new Date('${esc(endDate)}');
198
+ const q = '${esc(query)}'.toLowerCase();
199
+ const all = [];
200
+ for (const cal of cals) {
201
+ const events = cal.events.whose({
202
+ _and: [{startDate: {_greaterThanEquals: start}}, {startDate: {_lessThanEquals: end}}]
203
+ })();
204
+ const calName = cal.name();
205
+ for (const ev of events) {
206
+ const summary = ev.summary() || '';
207
+ const desc = ev.description() || '';
208
+ if (summary.toLowerCase().includes(q) || desc.toLowerCase().includes(q)) {
209
+ all.push({
210
+ id: ev.uid(),
211
+ summary: summary,
212
+ startDate: ev.startDate().toISOString(),
213
+ endDate: ev.endDate().toISOString(),
214
+ allDay: ev.alldayEvent(),
215
+ calendar: calName
216
+ });
217
+ }
218
+ }
219
+ }
220
+ all.sort((a, b) => new Date(a.startDate) - new Date(b.startDate));
221
+ const result = all.slice(0, ${limit});
222
+ JSON.stringify({total: all.length, returned: result.length, events: result});
223
+ `;
224
+ }
225
+ export function getUpcomingEventsScript(limit) {
226
+ return `
227
+ const Calendar = Application('Calendar');
228
+ const cals = Calendar.calendars();
229
+ const now = new Date();
230
+ const end = new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000);
231
+ const all = [];
232
+ for (const cal of cals) {
233
+ const events = cal.events.whose({
234
+ _and: [{startDate: {_greaterThanEquals: now}}, {startDate: {_lessThanEquals: end}}]
235
+ })();
236
+ const calName = cal.name();
237
+ for (const ev of events) {
238
+ all.push({
239
+ id: ev.uid(),
240
+ summary: ev.summary(),
241
+ startDate: ev.startDate().toISOString(),
242
+ endDate: ev.endDate().toISOString(),
243
+ allDay: ev.alldayEvent(),
244
+ location: ev.location(),
245
+ calendar: calName
246
+ });
247
+ }
248
+ }
249
+ all.sort((a, b) => new Date(a.startDate) - new Date(b.startDate));
250
+ const result = all.slice(0, ${limit});
251
+ JSON.stringify({total: all.length, returned: result.length, events: result});
252
+ `;
253
+ }
254
+ export function todayEventsScript() {
255
+ return `
256
+ const Calendar = Application('Calendar');
257
+ const cals = Calendar.calendars();
258
+ const now = new Date();
259
+ const start = new Date(now.getFullYear(), now.getMonth(), now.getDate());
260
+ const end = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);
261
+ const all = [];
262
+ for (const cal of cals) {
263
+ const events = cal.events.whose({
264
+ _and: [{startDate: {_greaterThanEquals: start}}, {startDate: {_lessThanEquals: end}}]
265
+ })();
266
+ const calName = cal.name();
267
+ for (const ev of events) {
268
+ all.push({
269
+ id: ev.uid(),
270
+ summary: ev.summary(),
271
+ startDate: ev.startDate().toISOString(),
272
+ endDate: ev.endDate().toISOString(),
273
+ allDay: ev.alldayEvent(),
274
+ location: ev.location(),
275
+ calendar: calName
276
+ });
277
+ }
278
+ }
279
+ all.sort((a, b) => new Date(a.startDate) - new Date(b.startDate));
280
+ JSON.stringify({total: all.length, events: all});
281
+ `;
282
+ }
283
+ //# sourceMappingURL=scripts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../src/calendar/scripts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ImcpConfig } from "../shared/config.js";
3
+ export declare function registerCalendarTools(server: McpServer, _config: ImcpConfig): void;
@@ -0,0 +1,210 @@
1
+ import { z } from "zod";
2
+ import { runJxa } from "../shared/jxa.js";
3
+ import { ok, err } from "../shared/result.js";
4
+ import { listCalendarsScript, listEventsScript, readEventScript, createEventScript, updateEventScript, deleteEventScript, searchEventsScript, getUpcomingEventsScript, todayEventsScript, } from "./scripts.js";
5
+ export function registerCalendarTools(server, _config) {
6
+ server.registerTool("list_calendars", {
7
+ title: "List Calendars",
8
+ description: "List all calendars with name, color, and writable status.",
9
+ inputSchema: {},
10
+ annotations: {
11
+ readOnlyHint: true,
12
+ destructiveHint: false,
13
+ idempotentHint: true,
14
+ openWorldHint: false,
15
+ },
16
+ }, async () => {
17
+ try {
18
+ const result = await runJxa(listCalendarsScript());
19
+ return ok(result);
20
+ }
21
+ catch (e) {
22
+ return err(`Failed to list calendars: ${e instanceof Error ? e.message : String(e)}`);
23
+ }
24
+ });
25
+ server.registerTool("list_events", {
26
+ title: "List Events",
27
+ description: "List events within a date range. Requires startDate and endDate (ISO 8601). Optionally filter by calendar name. Supports limit/offset pagination.",
28
+ inputSchema: {
29
+ startDate: z.string().describe("Start of range (ISO 8601, e.g. '2026-03-01T00:00:00Z')"),
30
+ endDate: z.string().describe("End of range (ISO 8601, e.g. '2026-03-31T23:59:59Z')"),
31
+ calendar: z.string().optional().describe("Filter by calendar name"),
32
+ limit: z.number().int().min(1).max(1000).optional().default(100).describe("Max events to return (default: 100)"),
33
+ offset: z.number().int().min(0).optional().default(0).describe("Number of events to skip (default: 0)"),
34
+ },
35
+ annotations: {
36
+ readOnlyHint: true,
37
+ destructiveHint: false,
38
+ idempotentHint: true,
39
+ openWorldHint: false,
40
+ },
41
+ }, async ({ startDate, endDate, calendar, limit, offset }) => {
42
+ try {
43
+ const result = await runJxa(listEventsScript(startDate, endDate, limit, offset, calendar));
44
+ return ok(result);
45
+ }
46
+ catch (e) {
47
+ return err(`Failed to list events: ${e instanceof Error ? e.message : String(e)}`);
48
+ }
49
+ });
50
+ server.registerTool("read_event", {
51
+ title: "Read Event",
52
+ description: "Read full details of a calendar event by ID. Includes attendees (read-only), location, description, and recurrence info.",
53
+ inputSchema: {
54
+ id: z.string().describe("Event UID"),
55
+ },
56
+ annotations: {
57
+ readOnlyHint: true,
58
+ destructiveHint: false,
59
+ idempotentHint: true,
60
+ openWorldHint: false,
61
+ },
62
+ }, async ({ id }) => {
63
+ try {
64
+ const result = await runJxa(readEventScript(id));
65
+ return ok(result);
66
+ }
67
+ catch (e) {
68
+ return err(`Failed to read event: ${e instanceof Error ? e.message : String(e)}`);
69
+ }
70
+ });
71
+ server.registerTool("create_event", {
72
+ title: "Create Event",
73
+ description: "Create a new calendar event. Recurring events cannot be created via automation. Attendees cannot be added programmatically.",
74
+ inputSchema: {
75
+ summary: z.string().describe("Event title"),
76
+ startDate: z.string().describe("Start date/time (ISO 8601)"),
77
+ endDate: z.string().describe("End date/time (ISO 8601)"),
78
+ location: z.string().optional().describe("Event location"),
79
+ description: z.string().optional().describe("Event notes/description"),
80
+ calendar: z.string().optional().describe("Target calendar name. Defaults to first writable calendar."),
81
+ allDay: z.boolean().optional().describe("Set as all-day event"),
82
+ },
83
+ annotations: {
84
+ readOnlyHint: false,
85
+ destructiveHint: false,
86
+ idempotentHint: false,
87
+ openWorldHint: false,
88
+ },
89
+ }, async ({ summary, startDate, endDate, location, description, calendar, allDay }) => {
90
+ try {
91
+ const result = await runJxa(createEventScript(summary, startDate, endDate, { location, description, calendar, allDay }));
92
+ return ok(result);
93
+ }
94
+ catch (e) {
95
+ return err(`Failed to create event: ${e instanceof Error ? e.message : String(e)}`);
96
+ }
97
+ });
98
+ server.registerTool("update_event", {
99
+ title: "Update Event",
100
+ description: "Update event properties. Only specified fields are changed. Attendees and recurrence rules cannot be modified via automation.",
101
+ inputSchema: {
102
+ id: z.string().describe("Event UID"),
103
+ summary: z.string().optional().describe("New title"),
104
+ startDate: z.string().optional().describe("New start date/time (ISO 8601)"),
105
+ endDate: z.string().optional().describe("New end date/time (ISO 8601)"),
106
+ location: z.string().optional().describe("New location"),
107
+ description: z.string().optional().describe("New notes/description"),
108
+ },
109
+ annotations: {
110
+ readOnlyHint: false,
111
+ destructiveHint: true,
112
+ idempotentHint: true,
113
+ openWorldHint: false,
114
+ },
115
+ }, async ({ id, summary, startDate, endDate, location, description }) => {
116
+ try {
117
+ const result = await runJxa(updateEventScript(id, { summary, startDate, endDate, location, description }));
118
+ return ok(result);
119
+ }
120
+ catch (e) {
121
+ return err(`Failed to update event: ${e instanceof Error ? e.message : String(e)}`);
122
+ }
123
+ });
124
+ server.registerTool("delete_event", {
125
+ title: "Delete Event",
126
+ description: "Delete a calendar event by ID. This action is permanent.",
127
+ inputSchema: {
128
+ id: z.string().describe("Event UID"),
129
+ },
130
+ annotations: {
131
+ readOnlyHint: false,
132
+ destructiveHint: true,
133
+ idempotentHint: true,
134
+ openWorldHint: false,
135
+ },
136
+ }, async ({ id }) => {
137
+ try {
138
+ const result = await runJxa(deleteEventScript(id));
139
+ return ok(result);
140
+ }
141
+ catch (e) {
142
+ return err(`Failed to delete event: ${e instanceof Error ? e.message : String(e)}`);
143
+ }
144
+ });
145
+ server.registerTool("search_events", {
146
+ title: "Search Events",
147
+ description: "Search events by keyword in title or description within a date range.",
148
+ inputSchema: {
149
+ query: z.string().describe("Search keyword"),
150
+ startDate: z.string().describe("Start of range (ISO 8601)"),
151
+ endDate: z.string().describe("End of range (ISO 8601)"),
152
+ limit: z.number().int().min(1).max(500).optional().default(50).describe("Max results (default: 50)"),
153
+ },
154
+ annotations: {
155
+ readOnlyHint: true,
156
+ destructiveHint: false,
157
+ idempotentHint: true,
158
+ openWorldHint: false,
159
+ },
160
+ }, async ({ query, startDate, endDate, limit }) => {
161
+ try {
162
+ const result = await runJxa(searchEventsScript(query, startDate, endDate, limit));
163
+ return ok(result);
164
+ }
165
+ catch (e) {
166
+ return err(`Failed to search events: ${e instanceof Error ? e.message : String(e)}`);
167
+ }
168
+ });
169
+ server.registerTool("get_upcoming_events", {
170
+ title: "Get Upcoming Events",
171
+ description: "Get the next N upcoming events from now (searches up to 30 days ahead). A convenience wrapper that doesn't require date range parameters.",
172
+ inputSchema: {
173
+ limit: z.number().int().min(1).max(500).optional().default(10).describe("Max events to return (default: 10)"),
174
+ },
175
+ annotations: {
176
+ readOnlyHint: true,
177
+ destructiveHint: false,
178
+ idempotentHint: true,
179
+ openWorldHint: false,
180
+ },
181
+ }, async ({ limit }) => {
182
+ try {
183
+ const result = await runJxa(getUpcomingEventsScript(limit));
184
+ return ok(result);
185
+ }
186
+ catch (e) {
187
+ return err(`Failed to get upcoming events: ${e instanceof Error ? e.message : String(e)}`);
188
+ }
189
+ });
190
+ server.registerTool("today_events", {
191
+ title: "Today's Events",
192
+ description: "Get all calendar events for today.",
193
+ inputSchema: {},
194
+ annotations: {
195
+ readOnlyHint: true,
196
+ destructiveHint: false,
197
+ idempotentHint: true,
198
+ openWorldHint: false,
199
+ },
200
+ }, async () => {
201
+ try {
202
+ const result = await runJxa(todayEventsScript());
203
+ return ok(result);
204
+ }
205
+ catch (e) {
206
+ return err(`Failed to get today's events: ${e instanceof Error ? e.message : String(e)}`);
207
+ }
208
+ });
209
+ }
210
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/calendar/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export declare function listContactsScript(limit: number, offset: number): string;
2
+ export declare function searchContactsScript(query: string, limit: number): string;
3
+ export declare function readContactScript(id: string): string;
4
+ export declare function createContactScript(firstName: string, lastName: string, opts: {
5
+ email?: string;
6
+ phone?: string;
7
+ organization?: string;
8
+ jobTitle?: string;
9
+ note?: string;
10
+ }): string;
11
+ export declare function updateContactScript(id: string, updates: {
12
+ firstName?: string;
13
+ lastName?: string;
14
+ organization?: string;
15
+ jobTitle?: string;
16
+ note?: string;
17
+ }): string;
18
+ export declare function deleteContactScript(id: string): string;
19
+ export declare function listGroupsScript(): string;
20
+ export declare function addContactEmailScript(id: string, email: string, label: string): string;
21
+ export declare function addContactPhoneScript(id: string, phone: string, label: string): string;
22
+ export declare function listGroupMembersScript(groupName: string, limit: number): string;