@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.
Files changed (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.ko.md +225 -57
  3. package/README.md +222 -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 +252 -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 +220 -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 +38 -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 +145 -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 +158 -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 +267 -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/setup.d.ts +2 -0
  87. package/dist/shared/setup.js +44 -0
  88. package/dist/shared/setup.js.map +1 -0
  89. package/dist/shared/swift.d.ts +2 -0
  90. package/dist/shared/swift.js +73 -0
  91. package/dist/shared/swift.js.map +1 -0
  92. package/dist/shortcuts/scripts.d.ts +4 -0
  93. package/dist/shortcuts/scripts.js +47 -0
  94. package/dist/shortcuts/scripts.js.map +1 -0
  95. package/dist/shortcuts/tools.d.ts +3 -0
  96. package/dist/shortcuts/tools.js +66 -0
  97. package/dist/shortcuts/tools.js.map +1 -0
  98. package/dist/system/scripts.d.ts +9 -0
  99. package/dist/system/scripts.js +124 -0
  100. package/dist/system/scripts.js.map +1 -0
  101. package/dist/system/tools.d.ts +3 -0
  102. package/dist/system/tools.js +179 -0
  103. package/dist/system/tools.js.map +1 -0
  104. package/package.json +39 -5
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 heznpc
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.ko.md CHANGED
@@ -1,41 +1,22 @@
1
1
  # iMcp
2
2
 
3
- Apple Notes용 MCP 서버. 완전한 CRUD, 일괄 스캔, 스마트 비교 AI를 Apple 생태계에 연결합니다.
3
+ Apple 생태계 전체를 위한 MCP 서버 Notes, Reminders, Calendar, Contacts, Mail, Music, Finder, Safari, System, Photos, Shortcuts, Apple Intelligence. AI를 Mac에 연결합니다.
4
4
 
5
5
  > [English](README.md)
6
6
 
7
7
  ## 특징
8
8
 
9
- - **12개 도구** — 메모 목록/검색/읽기/생성/수정/삭제/이동 + 폴더 관리 + 일괄 작업
10
- - **3개 프롬프트** — 메모 정리, 중복 찾기, 주간 리뷰
11
- - **JXA 기반**JavaScript for Automation으로 Apple Notes 직접 제어
9
+ - **103개 도구** (12개 모듈) Apple CRUD + 시스템 제어 + Apple Intelligence
10
+ - **14개 프롬프트** — 앱별 워크플로우 + 크로스 모듈 (데일리 브리핑, 주간 다이제스트, 리서치, 집중 세션)
11
+ - **4개 MCP 리소스** Notes, Calendar, Reminders 실시간 데이터 URI
12
+ - **JXA + Swift 브릿지** — JXA로 기본 자동화, EventKit/PhotoKit으로 고급 기능
13
+ - **반복 이벤트/리마인더** — EventKit으로 반복 규칙 생성 (macOS 26+ Swift 브릿지)
14
+ - **사진 가져오기/삭제** — PhotoKit으로 사진 관리 (macOS 26+ Swift 브릿지)
15
+ - **Apple Intelligence** — 온디바이스 요약, 재작성, 교정 (macOS 26+)
16
+ - **원클릭 셋업** — `setup_permissions` 도구로 모든 macOS 권한을 한번에 요청
12
17
  - **stdio 전송** — 안전한 로컬 통신, 네트워크 노출 없음
13
18
  - **Safety Annotations** — 모든 도구에 readOnly/destructive 힌트 적용
14
19
 
15
- ## 유사 프로젝트 비교
16
-
17
- | | **iMcp** | **apple-mcp** | **iMCP** | **mcp-apple-notes** |
18
- |---|---|---|---|---|
19
- | 개발자 | heznpc | supermemoryai | loopwork-ai | RafalWilinski |
20
- | 상태 | **활성** | 아카이브 | 활성 | 저활성 |
21
- | 언어 | TypeScript | TypeScript | Swift | TypeScript |
22
- | 대상 앱 | Notes | Notes 등 7개 앱 | Calendar 등 10개 서비스 (Notes 미지원) | Notes |
23
- | Notes CRUD | **전체 (생성/읽기/수정/삭제/이동)** | 일부 | 없음 | 읽기 + 생성만 |
24
- | 도구 수 | 12 | 7 (앱당 1개 + enum) | 28 | 5 |
25
- | 일괄 작업 | scan / compare / bulk_move | 없음 | 없음 | 없음 |
26
- | 프롬프트 | 3개 (정리, 중복, 리뷰) | 없음 | 없음 | 없음 |
27
- | Safety Annotations | 전체 적용 | 없음 | 없음 | 없음 |
28
- | 전송 방식 | stdio | stdio | TCP/Bonjour | stdio |
29
- | 설치 | `npx @heznpc/imcp` | `bunx apple-mcp` | Homebrew cask / 앱 다운로드 | 수동 clone |
30
- | 검색 | 키워드 검색 | 키워드 검색 | — | 벡터 + 전문 검색 (RAG) |
31
-
32
- ### 핵심 차이점
33
-
34
- - **apple-mcp** (3K+ 스타) — 가장 인기 있었으나 2026년 1월 아카이브. 더 이상 유지보수되지 않음
35
- - **iMCP** (loopwork-ai) — 네이티브 Swift 앱으로 가장 많은 서비스 지원. 그러나 **Notes를 지원하지 않고**, 대부분 읽기 전용이며, Bonjour로 네트워크 노출
36
- - **mcp-apple-notes** — RAG/시맨틱 검색이 독특한 장점이나, 도구가 5개뿐이고 CRUD가 불완전하며 npm 미배포
37
- - **iMcp** — Notes에 집중한 완전한 CRUD + 일괄 작업 + 가이드 프롬프트. `npx` 한 줄 실행, stdio로 보안 안전
38
-
39
20
  ## 빠른 시작
40
21
 
41
22
  ### Claude Desktop
@@ -68,63 +49,250 @@ npm install
68
49
  npm run build
69
50
  ```
70
51
 
71
- 이후 MCP 클라이언트에서 `node dist/index.js`를 실행합니다.
72
-
73
52
  ## 도구
74
53
 
75
- ### 메모
54
+ ### Notes (12개)
55
+
56
+ | 도구 | 설명 | 타입 |
57
+ |------|------|------|
58
+ | `list_notes` | 메모 목록 (제목, 폴더, 날짜) | 읽기 |
59
+ | `search_notes` | 키워드 검색 | 읽기 |
60
+ | `read_note` | 전체 내용 조회 | 읽기 |
61
+ | `create_note` | HTML 본문으로 생성 | 쓰기 |
62
+ | `update_note` | 본문 전체 교체 | 파괴적 |
63
+ | `delete_note` | 삭제 (최근 삭제로 이동) | 파괴적 |
64
+ | `move_note` | 다른 폴더로 이동 | 파괴적 |
65
+ | `list_folders` | 폴더 목록 | 읽기 |
66
+ | `create_folder` | 폴더 생성 | 쓰기 |
67
+ | `scan_notes` | 일괄 스캔 (미리보기 포함) | 읽기 |
68
+ | `compare_notes` | 2~5개 메모 비교 | 읽기 |
69
+ | `bulk_move_notes` | 여러 메모 일괄 이동 | 파괴적 |
70
+
71
+ ### Reminders (11개)
72
+
73
+ | 도구 | 설명 | 타입 |
74
+ |------|------|------|
75
+ | `list_reminder_lists` | 리스트 목록 | 읽기 |
76
+ | `list_reminders` | 리마인더 조회 (필터) | 읽기 |
77
+ | `read_reminder` | 상세 조회 | 읽기 |
78
+ | `create_reminder` | 생성 (마감일/우선순위) | 쓰기 |
79
+ | `update_reminder` | 속성 변경 | 파괴적 |
80
+ | `complete_reminder` | 완료/미완료 처리 | 쓰기 |
81
+ | `delete_reminder` | 영구 삭제 | 파괴적 |
82
+ | `search_reminders` | 이름/본문 키워드 검색 | 읽기 |
83
+ | `create_reminder_list` | 새 리스트 생성 | 쓰기 |
84
+ | `delete_reminder_list` | 리스트 삭제 | 파괴적 |
85
+ | `create_recurring_reminder` | 반복 규칙으로 생성 (Swift/EventKit) | 쓰기 |
86
+
87
+ ### Calendar (10개)
88
+
89
+ | 도구 | 설명 | 타입 |
90
+ |------|------|------|
91
+ | `list_calendars` | 캘린더 목록 | 읽기 |
92
+ | `list_events` | 날짜 범위 이벤트 조회 | 읽기 |
93
+ | `read_event` | 이벤트 상세 (참석자 포함) | 읽기 |
94
+ | `create_event` | 이벤트 생성 | 쓰기 |
95
+ | `update_event` | 이벤트 수정 | 파괴적 |
96
+ | `delete_event` | 이벤트 삭제 | 파괴적 |
97
+ | `search_events` | 키워드 검색 | 읽기 |
98
+ | `get_upcoming_events` | 지금부터 다음 N개 이벤트 | 읽기 |
99
+ | `today_events` | 오늘 일정 전체 | 읽기 |
100
+ | `create_recurring_event` | 반복 규칙으로 이벤트 생성 (Swift/EventKit) | 쓰기 |
101
+
102
+ ### Contacts (10개)
103
+
104
+ | 도구 | 설명 | 타입 |
105
+ |------|------|------|
106
+ | `list_contacts` | 연락처 목록 (페이지네이션) | 읽기 |
107
+ | `search_contacts` | 이름/이메일/전화/조직 검색 | 읽기 |
108
+ | `read_contact` | 상세 조회 (이메일, 전화, 주소) | 읽기 |
109
+ | `create_contact` | 연락처 생성 | 쓰기 |
110
+ | `update_contact` | 속성 변경 | 파괴적 |
111
+ | `delete_contact` | 영구 삭제 | 파괴적 |
112
+ | `list_groups` | 그룹 목록 | 읽기 |
113
+ | `add_contact_email` | 기존 연락처에 이메일 추가 | 쓰기 |
114
+ | `add_contact_phone` | 기존 연락처에 전화번호 추가 | 쓰기 |
115
+ | `list_group_members` | 그룹 내 연락처 목록 | 읽기 |
116
+
117
+ ### Mail (9개)
76
118
 
77
119
  | 도구 | 설명 | 타입 |
78
120
  |------|------|------|
79
- | `list_notes` | 전체 메모 목록 (제목, 폴더, 날짜) | 읽기 |
80
- | `search_notes` | 키워드로 제목/본문 검색 | 읽기 |
81
- | `read_note` | 특정 메모의 전체 내용 조회 | 읽기 |
82
- | `create_note` | HTML 본문으로 새 메모 생성 | 쓰기 |
83
- | `update_note` | 메모 본문 전체 교체 | 파괴적 |
84
- | `delete_note` | 메모 삭제 (최근 삭제로 이동) | 파괴적 |
85
- | `move_note` | 메모를 다른 폴더로 이동 | 파괴적 |
121
+ | `list_mailboxes` | 메일함 목록 (미읽음 ) | 읽기 |
122
+ | `list_messages` | 메일함 메시지 목록 | 읽기 |
123
+ | `read_message` | 메시지 전체 내용 | 읽기 |
124
+ | `search_messages` | 제목/발신자 검색 | 읽기 |
125
+ | `mark_message_read` | 읽음/안읽음 처리 | 쓰기 |
126
+ | `flag_message` | 깃발 표시/해제 | 쓰기 |
127
+ | `get_unread_count` | 전체 메일함 미읽음 | 읽기 |
128
+ | `move_message` | 다른 메일함으로 이동 | 파괴적 |
129
+ | `list_accounts` | 메일 계정 목록 | 읽기 |
130
+
131
+ ### Music (9개)
86
132
 
87
- ### 폴더
133
+ | 도구 | 설명 | 타입 |
134
+ |------|------|------|
135
+ | `list_playlists` | 재생목록 목록 | 읽기 |
136
+ | `list_tracks` | 재생목록 내 트랙 | 읽기 |
137
+ | `now_playing` | 현재 재생 중인 트랙 | 읽기 |
138
+ | `playback_control` | 재생/일시정지/다음/이전 | 쓰기 |
139
+ | `search_tracks` | 이름/아티스트/앨범 검색 | 읽기 |
140
+ | `play_track` | 이름으로 특정 트랙 재생 | 쓰기 |
141
+ | `play_playlist` | 재생목록 재생 시작 | 쓰기 |
142
+ | `get_track_info` | 트랙 상세 메타데이터 | 읽기 |
143
+ | `set_shuffle` | 셔플/반복 모드 설정 | 쓰기 |
144
+
145
+ ### Finder (8개)
88
146
 
89
147
  | 도구 | 설명 | 타입 |
90
148
  |------|------|------|
91
- | `list_folders` | 전체 폴더 목록 (메모 수 포함) | 읽기 |
149
+ | `search_files` | Spotlight 파일 검색 | 읽기 |
150
+ | `get_file_info` | 파일 정보 (크기, 날짜, 태그) | 읽기 |
151
+ | `set_file_tags` | Finder 태그 설정 | 파괴적 |
152
+ | `recent_files` | 최근 수정 파일 | 읽기 |
153
+ | `list_directory` | 디렉토리 내 파일 목록 | 읽기 |
154
+ | `move_file` | 파일 이동/이름 변경 | 파괴적 |
155
+ | `trash_file` | 휴지통으로 이동 | 파괴적 |
92
156
  | `create_folder` | 새 폴더 생성 | 쓰기 |
93
157
 
94
- ### 일괄 작업
158
+ ### Safari (8개)
95
159
 
96
160
  | 도구 | 설명 | 타입 |
97
161
  |------|------|------|
98
- | `scan_notes` | 메타데이터와 미리보기로 전체 메모 스캔 | 읽기 |
99
- | `compare_notes` | 2~5개 메모를 나란히 비교 | 읽기 |
100
- | `bulk_move_notes` | 여러 메모를 번에 이동 | 파괴적 |
162
+ | `list_tabs` | 전체 윈도우의 목록 | 읽기 |
163
+ | `read_page_content` | 페이지 텍스트 내용 읽기 | 읽기 |
164
+ | `get_current_tab` | 현재 활성 URL/제목 | 읽기 |
165
+ | `open_url` | Safari에서 URL 열기 | 쓰기 |
166
+ | `close_tab` | 특정 탭 닫기 | 파괴적 |
167
+ | `activate_tab` | 특정 탭으로 전환 | 쓰기 |
168
+ | `run_javascript` | 탭에서 JavaScript 실행 | 쓰기 |
169
+ | `search_tabs` | 제목/URL로 탭 검색 | 읽기 |
101
170
 
102
- ## 프롬프트
171
+ ### System (9개)
103
172
 
104
- 가이드 워크플로우로 메모를 정리할 있습니다:
173
+ | 도구 | 설명 | 타입 |
174
+ |------|------|------|
175
+ | `get_clipboard` | 클립보드 내용 읽기 | 읽기 |
176
+ | `set_clipboard` | 클립보드에 쓰기 | 쓰기 |
177
+ | `get_volume` | 시스템 볼륨 확인 | 읽기 |
178
+ | `set_volume` | 시스템 볼륨 설정 | 쓰기 |
179
+ | `toggle_dark_mode` | 다크/라이트 모드 전환 | 쓰기 |
180
+ | `get_frontmost_app` | 최전면 앱 확인 | 읽기 |
181
+ | `list_running_apps` | 실행 중인 앱 목록 | 읽기 |
182
+ | `get_screen_info` | 디스플레이 정보 | 읽기 |
183
+ | `show_notification` | 시스템 알림 표시 | 쓰기 |
184
+
185
+ ### Photos (9개)
105
186
 
106
- - **organize-notes** 전체 메모 스캔, 주제별 분류, 폴더 생성 및 이동
107
- - **find-duplicates** — 중복/유사 메모 찾기, 내용 비교, 정리 제안
108
- - **weekly-review** 지난 1주일 메모 요약 및 정리 제안
187
+ | 도구 | 설명 | 타입 |
188
+ |------|------|------|
189
+ | `list_albums` | 앨범 목록 | 읽기 |
190
+ | `list_photos` | 앨범 내 사진 목록 | 읽기 |
191
+ | `search_photos` | 키워드로 사진 검색 | 읽기 |
192
+ | `get_photo_info` | 사진 상세 메타데이터 | 읽기 |
193
+ | `list_favorites` | 즐겨찾기 사진 목록 | 읽기 |
194
+ | `create_album` | 새 앨범 생성 | 쓰기 |
195
+ | `add_to_album` | 앨범에 사진 추가 | 쓰기 |
196
+ | `import_photo` | 파일에서 사진 가져오기 (Swift/PhotoKit) | 쓰기 |
197
+ | `delete_photos` | ID로 사진 삭제 (Swift/PhotoKit) | 파괴적 |
198
+
199
+ ### Shortcuts (4개)
200
+
201
+ | 도구 | 설명 | 타입 |
202
+ |------|------|------|
203
+ | `list_shortcuts` | 사용 가능한 단축어 목록 | 읽기 |
204
+ | `run_shortcut` | 이름으로 단축어 실행 | 쓰기 |
205
+ | `search_shortcuts` | 이름으로 단축어 검색 | 읽기 |
206
+ | `get_shortcut_detail` | 단축어 상세 정보/액션 | 읽기 |
207
+
208
+ ### Apple Intelligence (3개)
209
+
210
+ macOS 26+ Apple Silicon 필요.
211
+
212
+ | 도구 | 설명 | 타입 |
213
+ |------|------|------|
214
+ | `summarize_text` | 온디바이스 텍스트 요약 | 읽기 |
215
+ | `rewrite_text` | 톤 지정 재작성 | 읽기 |
216
+ | `proofread_text` | 문법/맞춤법 교정 | 읽기 |
217
+
218
+ ## 리소스
219
+
220
+ MCP 리소스는 Apple 앱의 실시간 데이터를 URI로 제공합니다.
221
+
222
+ | URI | 설명 |
223
+ |-----|------|
224
+ | `notes://recent` | 최근 메모 10개 |
225
+ | `notes://recent/{count}` | 최근 메모 (개수 지정) |
226
+ | `calendar://today` | 오늘의 캘린더 이벤트 |
227
+ | `reminders://due` | 기한 지난 리마인더 |
228
+
229
+ ## 프롬프트
230
+
231
+ ### 앱별
232
+ - **organize-notes** — 메모 분류, 폴더 생성, 이동
233
+ - **find-duplicates** — 중복 메모 찾기, 비교, 정리
234
+ - **weekly-review** — 주간 메모 요약
235
+ - **organize-reminders** — 리마인더 정리
236
+ - **daily-review** — 오늘 마감 리마인더 리뷰
237
+ - **schedule-review** — 향후 일정 리뷰, 충돌 확인
238
+ - **meeting-prep** — 미팅 준비 (이벤트 + 관련 메모)
239
+
240
+ ### 크로스 모듈
241
+ - **daily-briefing** — 오늘 일정 + 마감 리마인더 + 최근 메모 종합
242
+ - **weekly-digest** — N일간 이벤트 + 메모 + 리마인더 종합 리뷰
243
+ - **meeting-notes-to-reminders** — 미팅 메모에서 할 일 추출 → 리마인더 생성
244
+ - **event-follow-up** — 미팅 후 팔로업 노트 + 리마인더 생성
245
+ - **research-with-safari** — Safari로 조사 + Notes에 결과 저장
246
+ - **focus-session** — Calendar + Reminders + Music으로 집중 세션
247
+ - **file-organizer** — Finder로 파일 정리 + Notes에 기록
109
248
 
110
249
  ## 설정
111
250
 
112
251
  | 환경 변수 | 기본값 | 설명 |
113
252
  |----------|--------|------|
114
- | `IMCP_INCLUDE_SHARED` | `false` | 공유 메모/폴더를 결과에 포함 |
253
+ | `IMCP_INCLUDE_SHARED` | `false` | 공유 메모/폴더 포함 |
115
254
 
116
255
  ## 요구 사항
117
256
 
118
- - macOS (Apple Notes는 macOS에서만 동작)
257
+ - macOS
119
258
  - Node.js >= 18
120
- - 첫 실행 시 Notes.app 제어를 위한 자동화 권한 요청
259
+ - 각 앱 자동화 권한 (첫 실행 시 요청) `setup_permissions` 도구로 한번에 설정 가능
260
+ - Apple Intelligence: macOS 26+ Apple Silicon
261
+
262
+ ## 제한 사항
263
+
264
+ ### Notes
265
+ - 이동 시 복사 후 삭제 (새 ID, 날짜 초기화, 첨부 파일 유실)
266
+ - 업데이트는 본문 전체를 교체합니다. 내용 보존을 위해 먼저 읽기
267
+ - 비밀번호 보호된 메모 읽기 불가
268
+
269
+ ### Reminders / Calendar
270
+ - JXA 반복 규칙은 읽기 전용 — `create_recurring_event`/`create_recurring_reminder` (Swift/EventKit) 사용
271
+ - 캘린더 참석자 읽기 전용
272
+
273
+ ### Contacts
274
+ - 사용자 지정 필드 접근 불가
275
+
276
+ ### Mail
277
+ - 내용 기본 5000자 제한 (`maxLength` 파라미터로 조절 가능)
278
+
279
+ ### Music
280
+ - 스마트 재생목록 읽기 전용
281
+ - 대기열 조작 불가
282
+
283
+ ### Finder
284
+ - 태그는 Spotlight (mdfind) 사용, 인덱스 상태에 따라 성능 변동
285
+
286
+ ### Safari
287
+ - 페이지 내용 읽기에는 Safari 개발자 메뉴에서 Apple 이벤트의 JavaScript 허용 필요
121
288
 
122
- ## 제약 사항
289
+ ### Photos
290
+ - JXA: 앨범 생성 및 사진 추가 가능, 가져오기/삭제 불가
291
+ - Swift 브릿지 (macOS 26+): PhotoKit으로 가져오기/삭제 가능
123
292
 
124
- - `move_note` / `bulk_move_notes`: Apple Notes에 네이티브 이동 명령이 없어 복사 후 삭제 방식. 새 ID 부여, 날짜 초기화, 첨부파일 손실.
125
- - `update_note`: 본문 전체를 교체. 부분 보존이 필요하면 먼저 read_note로 읽을 것. 첨부파일 손실 가능.
126
- - 검색은 클라이언트 사이드 (Apple Notes 스크립팅에 네이티브 검색 API 없음).
127
- - 비밀번호로 보호된 메모는 읽을 수 없음.
293
+ ### Apple Intelligence
294
+ - macOS 26 (Tahoe) + Apple Silicon 필요
295
+ - `npm run swift-build`로 브릿지 바이너리 빌드
128
296
 
129
297
  ## 라이선스
130
298
 
package/README.md CHANGED
@@ -1,14 +1,19 @@
1
1
  # iMcp
2
2
 
3
- MCP server for Apple Notes. Full CRUD, bulk scan, and smart comparison connect any AI to your Apple ecosystem.
3
+ MCP server for the entire Apple ecosystem — Notes, Reminders, Calendar, Contacts, Mail, Music, Finder, Safari, System, Photos, Shortcuts, and Apple Intelligence. Connect any AI to your Mac.
4
4
 
5
5
  > [한국어](README.ko.md)
6
6
 
7
7
  ## Features
8
8
 
9
- - **12 tools** list, search, read, create, update, delete, move notes + folder management + bulk operations
10
- - **3 prompts** — organize notes, find duplicates, weekly review
11
- - **JXA-based** — direct Apple Notes automation via JavaScript for Automation
9
+ - **103 tools** across 12 modules full CRUD for Apple apps + system control + Apple Intelligence
10
+ - **14 prompts** — per-app workflows + cross-module (daily briefing, weekly digest, research, focus sessions)
11
+ - **4 MCP Resources** — live data URIs for notes, calendar, and reminders
12
+ - **JXA + Swift bridge** — JXA for core automation, EventKit/PhotoKit via Swift for advanced features
13
+ - **Recurring events/reminders** — create recurrence rules via EventKit (macOS 26+ Swift bridge)
14
+ - **Photos import/delete** — import and delete photos via PhotoKit (macOS 26+ Swift bridge)
15
+ - **Apple Intelligence** — on-device summarization, rewriting, proofreading (macOS 26+)
16
+ - **One-click setup** — `setup_permissions` tool triggers all macOS permission prompts at once
12
17
  - **stdio transport** — secure local communication, no network exposure
13
18
  - **Safety annotations** — every tool tagged with readOnly/destructive hints
14
19
 
@@ -44,44 +49,202 @@ npm install
44
49
  npm run build
45
50
  ```
46
51
 
47
- Then point your MCP client to `node dist/index.js`.
48
-
49
52
  ## Tools
50
53
 
51
- ### Notes
54
+ ### Notes (12 tools)
55
+
56
+ | Tool | Description | Type |
57
+ |------|-------------|------|
58
+ | `list_notes` | List all notes with title, folder, dates | read |
59
+ | `search_notes` | Search by keyword in title and body | read |
60
+ | `read_note` | Read full content by ID | read |
61
+ | `create_note` | Create a note with HTML body | write |
62
+ | `update_note` | Replace entire body | destructive |
63
+ | `delete_note` | Delete (moved to Recently Deleted) | destructive |
64
+ | `move_note` | Move to another folder | destructive |
65
+ | `list_folders` | List folders with note counts | read |
66
+ | `create_folder` | Create a new folder | write |
67
+ | `scan_notes` | Bulk scan with metadata and preview | read |
68
+ | `compare_notes` | Compare 2-5 notes side by side | read |
69
+ | `bulk_move_notes` | Move multiple notes at once | destructive |
70
+
71
+ ### Reminders (11 tools)
72
+
73
+ | Tool | Description | Type |
74
+ |------|-------------|------|
75
+ | `list_reminder_lists` | List all lists with counts | read |
76
+ | `list_reminders` | Filter by list/completed | read |
77
+ | `read_reminder` | Full details by ID | read |
78
+ | `create_reminder` | Create with due date/priority | write |
79
+ | `update_reminder` | Update properties | destructive |
80
+ | `complete_reminder` | Mark complete/incomplete | write |
81
+ | `delete_reminder` | Delete permanently | destructive |
82
+ | `search_reminders` | Search by keyword in name/body | read |
83
+ | `create_reminder_list` | Create a new reminder list | write |
84
+ | `delete_reminder_list` | Delete a reminder list | destructive |
85
+ | `create_recurring_reminder` | Create with recurrence rule (Swift/EventKit) | write |
86
+
87
+ ### Calendar (10 tools)
88
+
89
+ | Tool | Description | Type |
90
+ |------|-------------|------|
91
+ | `list_calendars` | List calendars with name/color | read |
92
+ | `list_events` | Events in date range with pagination | read |
93
+ | `read_event` | Full details with attendees | read |
94
+ | `create_event` | Create with location/description | write |
95
+ | `update_event` | Update properties | destructive |
96
+ | `delete_event` | Delete permanently | destructive |
97
+ | `search_events` | Keyword search in date range | read |
98
+ | `get_upcoming_events` | Next N events from now | read |
99
+ | `today_events` | All events for today | read |
100
+ | `create_recurring_event` | Create with recurrence rule (Swift/EventKit) | write |
101
+
102
+ ### Contacts (10 tools)
103
+
104
+ | Tool | Description | Type |
105
+ |------|-------------|------|
106
+ | `list_contacts` | List with email/phone, pagination | read |
107
+ | `search_contacts` | Search by name, email, phone, or org | read |
108
+ | `read_contact` | Full details (emails, phones, addresses) | read |
109
+ | `create_contact` | Create with email/phone/org | write |
110
+ | `update_contact` | Update properties | destructive |
111
+ | `delete_contact` | Delete permanently | destructive |
112
+ | `list_groups` | List contact groups | read |
113
+ | `add_contact_email` | Add email to existing contact | write |
114
+ | `add_contact_phone` | Add phone to existing contact | write |
115
+ | `list_group_members` | List contacts in a group | read |
116
+
117
+ ### Mail (9 tools)
52
118
 
53
119
  | Tool | Description | Type |
54
120
  |------|-------------|------|
55
- | `list_notes` | List all notes with title, folder, and dates | read |
56
- | `search_notes` | Search notes by keyword in title and body | read |
57
- | `read_note` | Read full content of a note by ID | read |
58
- | `create_note` | Create a new note with HTML body | write |
59
- | `update_note` | Replace entire body of a note | destructive |
60
- | `delete_note` | Delete a note (moved to Recently Deleted) | destructive |
61
- | `move_note` | Move a note to another folder | destructive |
121
+ | `list_mailboxes` | List mailboxes with unread counts | read |
122
+ | `list_messages` | Recent messages in a mailbox | read |
123
+ | `read_message` | Full message content | read |
124
+ | `search_messages` | Search by subject/sender | read |
125
+ | `mark_message_read` | Mark read/unread | write |
126
+ | `flag_message` | Flag/unflag a message | write |
127
+ | `get_unread_count` | Total unread across all mailboxes | read |
128
+ | `move_message` | Move message to another mailbox | destructive |
129
+ | `list_accounts` | List all mail accounts | read |
62
130
 
63
- ### Folders
131
+ ### Music (9 tools)
64
132
 
65
133
  | Tool | Description | Type |
66
134
  |------|-------------|------|
67
- | `list_folders` | List all folders with note counts | read |
135
+ | `list_playlists` | List playlists with track counts | read |
136
+ | `list_tracks` | Tracks in a playlist | read |
137
+ | `now_playing` | Current track and playback state | read |
138
+ | `playback_control` | Play, pause, next, previous | write |
139
+ | `search_tracks` | Search by name/artist/album | read |
140
+ | `play_track` | Play a specific track by name | write |
141
+ | `play_playlist` | Start playing a playlist | write |
142
+ | `get_track_info` | Detailed track metadata | read |
143
+ | `set_shuffle` | Set shuffle and repeat mode | write |
144
+
145
+ ### Finder (8 tools)
146
+
147
+ | Tool | Description | Type |
148
+ |------|-------------|------|
149
+ | `search_files` | Spotlight search in a folder | read |
150
+ | `get_file_info` | File size, dates, kind, tags | read |
151
+ | `set_file_tags` | Set Finder tags on a file | destructive |
152
+ | `recent_files` | Recently modified files | read |
153
+ | `list_directory` | List files in a directory | read |
154
+ | `move_file` | Move or rename a file | destructive |
155
+ | `trash_file` | Move file to Trash | destructive |
68
156
  | `create_folder` | Create a new folder | write |
69
157
 
70
- ### Bulk Operations
158
+ ### Safari (8 tools)
71
159
 
72
160
  | Tool | Description | Type |
73
161
  |------|-------------|------|
74
- | `scan_notes` | Bulk scan notes with metadata and preview | read |
75
- | `compare_notes` | Compare 2-5 notes side by side | read |
76
- | `bulk_move_notes` | Move multiple notes at once | destructive |
162
+ | `list_tabs` | List all open tabs across windows | read |
163
+ | `read_page_content` | Read text content of a page | read |
164
+ | `get_current_tab` | Get the active tab URL and title | read |
165
+ | `open_url` | Open a URL in Safari | write |
166
+ | `close_tab` | Close a specific tab | destructive |
167
+ | `activate_tab` | Switch to a specific tab | write |
168
+ | `run_javascript` | Execute JavaScript in a tab | write |
169
+ | `search_tabs` | Search tabs by title or URL | read |
170
+
171
+ ### System (9 tools)
172
+
173
+ | Tool | Description | Type |
174
+ |------|-------------|------|
175
+ | `get_clipboard` | Read clipboard contents | read |
176
+ | `set_clipboard` | Write to clipboard | write |
177
+ | `get_volume` | Get system volume level | read |
178
+ | `set_volume` | Set system volume level | write |
179
+ | `toggle_dark_mode` | Toggle dark/light mode | write |
180
+ | `get_frontmost_app` | Get the frontmost application | read |
181
+ | `list_running_apps` | List all running applications | read |
182
+ | `get_screen_info` | Get display information | read |
183
+ | `show_notification` | Display a system notification | write |
184
+
185
+ ### Photos (9 tools)
186
+
187
+ | Tool | Description | Type |
188
+ |------|-------------|------|
189
+ | `list_albums` | List photo albums | read |
190
+ | `list_photos` | List photos in an album | read |
191
+ | `search_photos` | Search photos by keyword | read |
192
+ | `get_photo_info` | Detailed photo metadata | read |
193
+ | `list_favorites` | List favorite photos | read |
194
+ | `create_album` | Create a new album | write |
195
+ | `add_to_album` | Add photos to an album | write |
196
+ | `import_photo` | Import from file path (Swift/PhotoKit) | write |
197
+ | `delete_photos` | Delete photos by ID (Swift/PhotoKit) | destructive |
198
+
199
+ ### Shortcuts (4 tools)
200
+
201
+ | Tool | Description | Type |
202
+ |------|-------------|------|
203
+ | `list_shortcuts` | List available Shortcuts | read |
204
+ | `run_shortcut` | Run a Shortcut by name | write |
205
+ | `search_shortcuts` | Search shortcuts by name | read |
206
+ | `get_shortcut_detail` | Get shortcut details/actions | read |
207
+
208
+ ### Apple Intelligence (3 tools)
209
+
210
+ Requires macOS 26+ with Apple Silicon. Graceful error on unsupported systems.
211
+
212
+ | Tool | Description | Type |
213
+ |------|-------------|------|
214
+ | `summarize_text` | On-device summarization | read |
215
+ | `rewrite_text` | Rewrite in specified tone | read |
216
+ | `proofread_text` | Grammar/spelling correction | read |
217
+
218
+ ## Resources
219
+
220
+ MCP Resources expose live data from Apple apps as URIs.
221
+
222
+ | URI | Description |
223
+ |-----|-------------|
224
+ | `notes://recent` | 10 most recent notes |
225
+ | `notes://recent/{count}` | Recent notes (configurable count) |
226
+ | `calendar://today` | Today's calendar events |
227
+ | `reminders://due` | Overdue reminders |
77
228
 
78
229
  ## Prompts
79
230
 
80
- Use these guided workflows to organize your notes:
231
+ ### Per-App
232
+ - **organize-notes** — Classify notes by topic, create folders, move
233
+ - **find-duplicates** — Find similar notes, compare, suggest cleanup
234
+ - **weekly-review** — Summarize past week's notes
235
+ - **organize-reminders** — Scan, identify overdue/completed, cleanup
236
+ - **daily-review** — Today's due reminders with priorities
237
+ - **schedule-review** — Upcoming events, conflicts, optimizations
238
+ - **meeting-prep** — Event details + related notes for meeting prep
81
239
 
82
- - **organize-notes** — Scan all notes, classify by topic, create folders, and move notes
83
- - **find-duplicates** — Find duplicate or similar notes, compare content, and suggest cleanup
84
- - **weekly-review** — Summarize notes from the past week and suggest actions
240
+ ### Cross-Module
241
+ - **daily-briefing** — Today's events + due reminders + recent notes
242
+ - **weekly-digest** — Past N days: events + notes + reminders combined
243
+ - **meeting-notes-to-reminders** — Extract action items from meeting notes, create reminders
244
+ - **event-follow-up** — Create follow-up note and reminders after a meeting
245
+ - **research-with-safari** — Browse with Safari + save findings to Notes
246
+ - **focus-session** — Calendar + Reminders + Music for focused work
247
+ - **file-organizer** — Organize files with Finder + track in Notes
85
248
 
86
249
  ## Configuration
87
250
 
@@ -91,16 +254,45 @@ Use these guided workflows to organize your notes:
91
254
 
92
255
  ## Requirements
93
256
 
94
- - macOS (Apple Notes requires macOS)
257
+ - macOS (Apple apps require macOS)
95
258
  - Node.js >= 18
96
- - First run will prompt for Automation permission to control Notes.app
259
+ - First run will prompt for Automation permission for each app — use `setup_permissions` tool to grant all at once
260
+ - Apple Intelligence tools require macOS 26+ with Apple Silicon
97
261
 
98
262
  ## Limitations
99
263
 
100
- - `move_note` / `bulk_move_notes`: Apple Notes has no native move command. Notes are copied and deleted, resulting in new IDs, reset dates, and lost attachments.
101
- - `update_note`: Replaces entire body. Read the note first to preserve content. Attachments may be lost.
102
- - Search is client-side (no native search API in Apple Notes scripting).
103
- - Password-protected notes cannot be read.
264
+ ### Notes
265
+ - Move copies and deletes (new ID, reset dates, lost attachments)
266
+ - Update replaces entire body. Read first to preserve content.
267
+ - Password-protected notes unreadable.
268
+
269
+ ### Reminders / Calendar
270
+ - JXA recurrence rules are read-only — use `create_recurring_event`/`create_recurring_reminder` (Swift/EventKit) to create recurring items
271
+ - Calendar attendees are read-only
272
+
273
+ ### Contacts
274
+ - Custom fields not accessible
275
+
276
+ ### Mail
277
+ - Content truncated to 5000 characters by default (configurable via `maxLength` parameter)
278
+
279
+ ### Music
280
+ - Smart playlists are read-only
281
+ - No queue manipulation
282
+
283
+ ### Finder
284
+ - Tags use Spotlight (mdfind), performance varies with index state
285
+
286
+ ### Safari
287
+ - Reading page content requires Allow JavaScript from Apple Events in Safari Developer menu
288
+
289
+ ### Photos
290
+ - JXA: albums can be created and photos added, but no import/delete
291
+ - Swift bridge (macOS 26+): full import and delete via PhotoKit
292
+
293
+ ### Apple Intelligence
294
+ - Requires macOS 26 (Tahoe) + Apple Silicon
295
+ - Run `npm run swift-build` to compile the bridge binary
104
296
 
105
297
  ## License
106
298
 
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerCalendarPrompts(server: McpServer): void;