airmcp 1.0.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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +645 -0
  3. package/dist/calendar/prompts.d.ts +2 -0
  4. package/dist/calendar/prompts.js +43 -0
  5. package/dist/calendar/prompts.js.map +1 -0
  6. package/dist/calendar/scripts.d.ts +20 -0
  7. package/dist/calendar/scripts.js +286 -0
  8. package/dist/calendar/scripts.js.map +1 -0
  9. package/dist/calendar/tools.d.ts +3 -0
  10. package/dist/calendar/tools.js +252 -0
  11. package/dist/calendar/tools.js.map +1 -0
  12. package/dist/cli/doctor.d.ts +7 -0
  13. package/dist/cli/doctor.js +157 -0
  14. package/dist/cli/doctor.js.map +1 -0
  15. package/dist/cli/init.d.ts +8 -0
  16. package/dist/cli/init.js +179 -0
  17. package/dist/cli/init.js.map +1 -0
  18. package/dist/contacts/scripts.d.ts +22 -0
  19. package/dist/contacts/scripts.js +220 -0
  20. package/dist/contacts/scripts.js.map +1 -0
  21. package/dist/contacts/tools.d.ts +3 -0
  22. package/dist/contacts/tools.js +173 -0
  23. package/dist/contacts/tools.js.map +1 -0
  24. package/dist/cross/prompts.d.ts +2 -0
  25. package/dist/cross/prompts.js +802 -0
  26. package/dist/cross/prompts.js.map +1 -0
  27. package/dist/cross/tools.d.ts +7 -0
  28. package/dist/cross/tools.js +81 -0
  29. package/dist/cross/tools.js.map +1 -0
  30. package/dist/finder/scripts.d.ts +8 -0
  31. package/dist/finder/scripts.js +127 -0
  32. package/dist/finder/scripts.js.map +1 -0
  33. package/dist/finder/tools.d.ts +3 -0
  34. package/dist/finder/tools.js +134 -0
  35. package/dist/finder/tools.js.map +1 -0
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.js +252 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/intelligence/tools.d.ts +3 -0
  40. package/dist/intelligence/tools.js +210 -0
  41. package/dist/intelligence/tools.js.map +1 -0
  42. package/dist/mail/scripts.d.ts +11 -0
  43. package/dist/mail/scripts.js +256 -0
  44. package/dist/mail/scripts.js.map +1 -0
  45. package/dist/mail/tools.d.ts +3 -0
  46. package/dist/mail/tools.js +188 -0
  47. package/dist/mail/tools.js.map +1 -0
  48. package/dist/maps/scripts.d.ts +6 -0
  49. package/dist/maps/scripts.js +61 -0
  50. package/dist/maps/scripts.js.map +1 -0
  51. package/dist/maps/tools.d.ts +3 -0
  52. package/dist/maps/tools.js +109 -0
  53. package/dist/maps/tools.js.map +1 -0
  54. package/dist/messages/scripts.d.ts +6 -0
  55. package/dist/messages/scripts.js +140 -0
  56. package/dist/messages/scripts.js.map +1 -0
  57. package/dist/messages/tools.d.ts +3 -0
  58. package/dist/messages/tools.js +105 -0
  59. package/dist/messages/tools.js.map +1 -0
  60. package/dist/music/scripts.d.ts +13 -0
  61. package/dist/music/scripts.js +218 -0
  62. package/dist/music/scripts.js.map +1 -0
  63. package/dist/music/tools.d.ts +3 -0
  64. package/dist/music/tools.js +205 -0
  65. package/dist/music/tools.js.map +1 -0
  66. package/dist/notes/prompts.d.ts +2 -0
  67. package/dist/notes/prompts.js +47 -0
  68. package/dist/notes/prompts.js.map +1 -0
  69. package/dist/notes/scripts.d.ts +15 -0
  70. package/dist/notes/scripts.js +348 -0
  71. package/dist/notes/scripts.js.map +1 -0
  72. package/dist/notes/tools.d.ts +3 -0
  73. package/dist/notes/tools.js +317 -0
  74. package/dist/notes/tools.js.map +1 -0
  75. package/dist/photos/scripts.d.ts +7 -0
  76. package/dist/photos/scripts.js +142 -0
  77. package/dist/photos/scripts.js.map +1 -0
  78. package/dist/photos/tools.d.ts +3 -0
  79. package/dist/photos/tools.js +158 -0
  80. package/dist/photos/tools.js.map +1 -0
  81. package/dist/podcasts/scripts.d.ts +6 -0
  82. package/dist/podcasts/scripts.js +116 -0
  83. package/dist/podcasts/scripts.js.map +1 -0
  84. package/dist/podcasts/tools.d.ts +3 -0
  85. package/dist/podcasts/tools.js +96 -0
  86. package/dist/podcasts/tools.js.map +1 -0
  87. package/dist/reminders/prompts.d.ts +2 -0
  88. package/dist/reminders/prompts.js +40 -0
  89. package/dist/reminders/prompts.js.map +1 -0
  90. package/dist/reminders/scripts.d.ts +21 -0
  91. package/dist/reminders/scripts.js +208 -0
  92. package/dist/reminders/scripts.js.map +1 -0
  93. package/dist/reminders/tools.d.ts +3 -0
  94. package/dist/reminders/tools.js +269 -0
  95. package/dist/reminders/tools.js.map +1 -0
  96. package/dist/safari/scripts.d.ts +12 -0
  97. package/dist/safari/scripts.js +203 -0
  98. package/dist/safari/scripts.js.map +1 -0
  99. package/dist/safari/tools.d.ts +3 -0
  100. package/dist/safari/tools.js +188 -0
  101. package/dist/safari/tools.js.map +1 -0
  102. package/dist/screen/scripts.d.ts +26 -0
  103. package/dist/screen/scripts.js +115 -0
  104. package/dist/screen/scripts.js.map +1 -0
  105. package/dist/screen/tools.d.ts +3 -0
  106. package/dist/screen/tools.js +168 -0
  107. package/dist/screen/tools.js.map +1 -0
  108. package/dist/semantic/embeddings.d.ts +12 -0
  109. package/dist/semantic/embeddings.js +101 -0
  110. package/dist/semantic/embeddings.js.map +1 -0
  111. package/dist/semantic/service.d.ts +68 -0
  112. package/dist/semantic/service.js +257 -0
  113. package/dist/semantic/service.js.map +1 -0
  114. package/dist/semantic/store.d.ts +56 -0
  115. package/dist/semantic/store.js +107 -0
  116. package/dist/semantic/store.js.map +1 -0
  117. package/dist/semantic/tools.d.ts +10 -0
  118. package/dist/semantic/tools.js +102 -0
  119. package/dist/semantic/tools.js.map +1 -0
  120. package/dist/shared/config.d.ts +41 -0
  121. package/dist/shared/config.js +152 -0
  122. package/dist/shared/config.js.map +1 -0
  123. package/dist/shared/esc.d.ts +10 -0
  124. package/dist/shared/esc.js +35 -0
  125. package/dist/shared/esc.js.map +1 -0
  126. package/dist/shared/hitl-guard.d.ts +8 -0
  127. package/dist/shared/hitl-guard.js +39 -0
  128. package/dist/shared/hitl-guard.js.map +1 -0
  129. package/dist/shared/hitl.d.ts +16 -0
  130. package/dist/shared/hitl.js +131 -0
  131. package/dist/shared/hitl.js.map +1 -0
  132. package/dist/shared/jxa.d.ts +1 -0
  133. package/dist/shared/jxa.js +52 -0
  134. package/dist/shared/jxa.js.map +1 -0
  135. package/dist/shared/modules.d.ts +2 -0
  136. package/dist/shared/modules.js +43 -0
  137. package/dist/shared/modules.js.map +1 -0
  138. package/dist/shared/prompt.d.ts +11 -0
  139. package/dist/shared/prompt.js +8 -0
  140. package/dist/shared/prompt.js.map +1 -0
  141. package/dist/shared/registry.d.ts +9 -0
  142. package/dist/shared/registry.js +2 -0
  143. package/dist/shared/registry.js.map +1 -0
  144. package/dist/shared/resources.d.ts +14 -0
  145. package/dist/shared/resources.js +222 -0
  146. package/dist/shared/resources.js.map +1 -0
  147. package/dist/shared/result.d.ts +23 -0
  148. package/dist/shared/result.js +19 -0
  149. package/dist/shared/result.js.map +1 -0
  150. package/dist/shared/setup.d.ts +3 -0
  151. package/dist/shared/setup.js +53 -0
  152. package/dist/shared/setup.js.map +1 -0
  153. package/dist/shared/share-guard.d.ts +30 -0
  154. package/dist/shared/share-guard.js +60 -0
  155. package/dist/shared/share-guard.js.map +1 -0
  156. package/dist/shared/swift.d.ts +2 -0
  157. package/dist/shared/swift.js +73 -0
  158. package/dist/shared/swift.js.map +1 -0
  159. package/dist/shortcuts/prompts.d.ts +2 -0
  160. package/dist/shortcuts/prompts.js +148 -0
  161. package/dist/shortcuts/prompts.js.map +1 -0
  162. package/dist/shortcuts/scripts.d.ts +10 -0
  163. package/dist/shortcuts/scripts.js +115 -0
  164. package/dist/shortcuts/scripts.js.map +1 -0
  165. package/dist/shortcuts/tools.d.ts +14 -0
  166. package/dist/shortcuts/tools.js +230 -0
  167. package/dist/shortcuts/tools.js.map +1 -0
  168. package/dist/system/scripts.d.ts +17 -0
  169. package/dist/system/scripts.js +257 -0
  170. package/dist/system/scripts.js.map +1 -0
  171. package/dist/system/tools.d.ts +3 -0
  172. package/dist/system/tools.js +333 -0
  173. package/dist/system/tools.js.map +1 -0
  174. package/dist/tv/scripts.d.ts +6 -0
  175. package/dist/tv/scripts.js +121 -0
  176. package/dist/tv/scripts.js.map +1 -0
  177. package/dist/tv/tools.d.ts +3 -0
  178. package/dist/tv/tools.js +95 -0
  179. package/dist/tv/tools.js.map +1 -0
  180. package/dist/ui/scripts.d.ts +24 -0
  181. package/dist/ui/scripts.js +345 -0
  182. package/dist/ui/scripts.js.map +1 -0
  183. package/dist/ui/tools.d.ts +3 -0
  184. package/dist/ui/tools.js +145 -0
  185. package/dist/ui/tools.js.map +1 -0
  186. package/package.json +101 -0
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.md ADDED
@@ -0,0 +1,645 @@
1
+ # AirMCP
2
+
3
+ MCP server for the entire Apple ecosystem — Notes, Reminders, Calendar, Contacts, Mail, Messages, Music, Finder, Safari, System, Photos, Shortcuts, Apple Intelligence, TV, Screen Capture, Maps, and Podcasts. Connect any AI to your Mac.
4
+
5
+ > Available in multiple languages at the [project landing page](https://heznpc.github.io/AirMCP/).
6
+
7
+ ## Features
8
+
9
+ - **170+ tools** (18 modules) — Apple app CRUD + system control + Apple Intelligence + UI Automation + Screen Capture + Maps + Podcasts + dynamic shortcuts
10
+ - **23 prompts** — per-app workflows + cross-module + developer workflows (dev-session, debug-loop, build-log)
11
+ - **11 MCP resources** — Notes, Calendar, Reminders live data URIs
12
+ - **JXA + Swift bridge** — JXA for basic automation, EventKit/PhotoKit for advanced features
13
+ - **Recurring events/reminders** — EventKit recurrence rules (macOS 26+ Swift bridge)
14
+ - **Photo import/delete** — PhotoKit photo management (macOS 26+ Swift bridge)
15
+ - **Apple Intelligence** — On-device summarize, rewrite, proofread (macOS 26+)
16
+ - **Native menubar app** — SwiftUI companion with onboarding wizard, auto-start, log viewer, update notifications, permission setup
17
+ - **One-click setup** — `setup_permissions` tool or menubar app to request all macOS permissions at once
18
+ - **Dual transport** — stdio (default, safe local) + HTTP/SSE (`--http`) for remote agents and registries
19
+ - **Safety annotations** — readOnly/destructive hints on all tools
20
+
21
+ ## Get Started (2 minutes)
22
+
23
+ ### 1. Install Node.js
24
+
25
+ If you don't have Node.js, install it first:
26
+
27
+ ```bash
28
+ # Using Homebrew (recommended)
29
+ brew install node
30
+
31
+ # Or download from https://nodejs.org (LTS version)
32
+ ```
33
+
34
+ ### 2. Run the Setup Wizard
35
+
36
+ ```bash
37
+ npx airmcp init
38
+ ```
39
+
40
+ This will:
41
+ - Let you choose which Apple apps to connect (Notes, Calendar, Reminders, etc.)
42
+ - Automatically configure your MCP client
43
+ - Save your preferences to `~/.config/airmcp/config.json`
44
+
45
+ ### 3. Restart Your MCP Client
46
+
47
+ That's it! Your AI can now read your notes, manage reminders, check your calendar, and more.
48
+
49
+ ### Troubleshooting
50
+
51
+ ```bash
52
+ npx airmcp doctor
53
+ ```
54
+
55
+ Checks Node.js version, config files, MCP client setup, macOS permissions, and module status — all in one command.
56
+
57
+ ---
58
+
59
+ ## Client Setup
60
+
61
+ Works with any MCP-compatible client. Examples:
62
+
63
+ ### Claude Desktop
64
+
65
+ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
66
+
67
+ ```json
68
+ {
69
+ "mcpServers": {
70
+ "airmcp": {
71
+ "command": "npx",
72
+ "args": ["-y", "airmcp"]
73
+ }
74
+ }
75
+ }
76
+ ```
77
+
78
+ ### Claude Code
79
+
80
+ ```bash
81
+ claude mcp add airmcp -- npx -y airmcp
82
+ ```
83
+
84
+ ### Cursor
85
+
86
+ Add to `.cursor/mcp.json`:
87
+
88
+ ```json
89
+ {
90
+ "mcpServers": {
91
+ "airmcp": {
92
+ "command": "npx",
93
+ "args": ["-y", "airmcp"]
94
+ }
95
+ }
96
+ }
97
+ ```
98
+
99
+ ### Windsurf
100
+
101
+ Add to `~/.codeium/windsurf/mcp_config.json`:
102
+
103
+ ```json
104
+ {
105
+ "mcpServers": {
106
+ "airmcp": {
107
+ "command": "npx",
108
+ "args": ["-y", "airmcp"]
109
+ }
110
+ }
111
+ }
112
+ ```
113
+
114
+ ### Other MCP Clients
115
+
116
+ Any client that supports the MCP stdio transport can use AirMCP. Use `npx -y airmcp` as the server command.
117
+
118
+ ### Local Development
119
+
120
+ ```bash
121
+ git clone https://github.com/heznpc/AirMCP.git
122
+ cd AirMCP
123
+ npm install
124
+ npm run build
125
+ node dist/index.js
126
+ ```
127
+
128
+ ### Menubar App (Optional)
129
+
130
+ A native SwiftUI companion app for server status monitoring and permission setup.
131
+
132
+ ```bash
133
+ cd app && swift build -c release
134
+ # Binary: app/.build/release/AirMCPApp
135
+ ```
136
+
137
+ Features: onboarding wizard, auto-start on login, log viewer, update notifications, server status, one-click permission setup, MCP client config clipboard copy.
138
+
139
+ ### HTTP Mode
140
+
141
+ HTTP server mode for remote agents, registries, and multi-client setups:
142
+
143
+ ```bash
144
+ npx airmcp --http --port 3847
145
+ ```
146
+
147
+ - Endpoint: `POST/GET/DELETE /mcp`
148
+ - Transport: Streamable HTTP + SSE (MCP spec 2024-11-05)
149
+ - Session management via `Mcp-Session-Id` header
150
+ - Default port: 3847
151
+
152
+ Useful for running a Mac Mini as an "always-on AI hub."
153
+
154
+ ## Tools
155
+
156
+ ### Notes (12 tools)
157
+
158
+ | Tool | Description | Type |
159
+ |------|-------------|------|
160
+ | `list_notes` | List all notes with title, folder, dates | read |
161
+ | `search_notes` | Search by keyword in title and body | read |
162
+ | `read_note` | Read full content by ID | read |
163
+ | `create_note` | Create a note with HTML body | write |
164
+ | `update_note` | Replace entire body | destructive |
165
+ | `delete_note` | Delete (moved to Recently Deleted) | destructive |
166
+ | `move_note` | Move to another folder | destructive |
167
+ | `list_folders` | List folders with note counts | read |
168
+ | `create_folder` | Create a new folder | write |
169
+ | `scan_notes` | Bulk scan with metadata and preview | read |
170
+ | `compare_notes` | Compare 2-5 notes side by side | read |
171
+ | `bulk_move_notes` | Move multiple notes at once | destructive |
172
+
173
+ ### Reminders (11 tools)
174
+
175
+ | Tool | Description | Type |
176
+ |------|-------------|------|
177
+ | `list_reminder_lists` | List all lists with counts | read |
178
+ | `list_reminders` | Filter by list/completed | read |
179
+ | `read_reminder` | Full details by ID | read |
180
+ | `create_reminder` | Create with due date/priority | write |
181
+ | `update_reminder` | Update properties | destructive |
182
+ | `complete_reminder` | Mark complete/incomplete | write |
183
+ | `delete_reminder` | Delete permanently | destructive |
184
+ | `search_reminders` | Search by keyword in name/body | read |
185
+ | `create_reminder_list` | Create a new reminder list | write |
186
+ | `delete_reminder_list` | Delete a reminder list | destructive |
187
+ | `create_recurring_reminder` | Create with recurrence rule (Swift/EventKit) | write |
188
+
189
+ ### Calendar (10 tools)
190
+
191
+ | Tool | Description | Type |
192
+ |------|-------------|------|
193
+ | `list_calendars` | List calendars with name/color | read |
194
+ | `list_events` | Events in date range with pagination | read |
195
+ | `read_event` | Full details with attendees | read |
196
+ | `create_event` | Create with location/description | write |
197
+ | `update_event` | Update properties | destructive |
198
+ | `delete_event` | Delete permanently | destructive |
199
+ | `search_events` | Keyword search in date range | read |
200
+ | `get_upcoming_events` | Next N events from now | read |
201
+ | `today_events` | All events for today | read |
202
+ | `create_recurring_event` | Create with recurrence rule (Swift/EventKit) | write |
203
+
204
+ ### Contacts (10 tools)
205
+
206
+ | Tool | Description | Type |
207
+ |------|-------------|------|
208
+ | `list_contacts` | List with email/phone, pagination | read |
209
+ | `search_contacts` | Search by name, email, phone, or org | read |
210
+ | `read_contact` | Full details (emails, phones, addresses) | read |
211
+ | `create_contact` | Create with email/phone/org | write |
212
+ | `update_contact` | Update properties | destructive |
213
+ | `delete_contact` | Delete permanently | destructive |
214
+ | `list_groups` | List contact groups | read |
215
+ | `add_contact_email` | Add email to existing contact | write |
216
+ | `add_contact_phone` | Add phone to existing contact | write |
217
+ | `list_group_members` | List contacts in a group | read |
218
+
219
+ ### Mail (11 tools)
220
+
221
+ | Tool | Description | Type |
222
+ |------|-------------|------|
223
+ | `list_mailboxes` | List mailboxes with unread counts | read |
224
+ | `list_messages` | Recent messages in a mailbox | read |
225
+ | `read_message` | Full message content | read |
226
+ | `search_messages` | Search by subject/sender | read |
227
+ | `mark_message_read` | Mark read/unread | write |
228
+ | `flag_message` | Flag/unflag a message | write |
229
+ | `get_unread_count` | Total unread across all mailboxes | read |
230
+ | `move_message` | Move message to another mailbox | destructive |
231
+ | `list_accounts` | List all mail accounts | read |
232
+ | `send_mail` | Compose and send an email | write |
233
+ | `reply_mail` | Reply to an email message | write |
234
+
235
+ ### Music (13 tools)
236
+
237
+ | Tool | Description | Type |
238
+ |------|-------------|------|
239
+ | `list_playlists` | List playlists with track counts | read |
240
+ | `list_tracks` | Tracks in a playlist | read |
241
+ | `now_playing` | Current track and playback state | read |
242
+ | `playback_control` | Play, pause, next, previous | write |
243
+ | `search_tracks` | Search by name/artist/album | read |
244
+ | `play_track` | Play a specific track by name | write |
245
+ | `play_playlist` | Start playing a playlist | write |
246
+ | `get_track_info` | Detailed track metadata | read |
247
+ | `set_shuffle` | Set shuffle and repeat mode | write |
248
+ | `create_playlist` | Create a new playlist | write |
249
+ | `add_to_playlist` | Add a track to a playlist | write |
250
+ | `remove_from_playlist` | Remove a track from a playlist | destructive |
251
+ | `delete_playlist` | Delete an existing playlist | destructive |
252
+
253
+ ### Finder (8 tools)
254
+
255
+ | Tool | Description | Type |
256
+ |------|-------------|------|
257
+ | `search_files` | Spotlight file search | read |
258
+ | `get_file_info` | File info (size, dates, tags) | read |
259
+ | `set_file_tags` | Set Finder tags | destructive |
260
+ | `recent_files` | Recently modified files | read |
261
+ | `list_directory` | List files in directory | read |
262
+ | `move_file` | Move/rename file | destructive |
263
+ | `trash_file` | Move to Trash | destructive |
264
+ | `create_directory` | Create new directory | write |
265
+
266
+ ### Safari (12 tools)
267
+
268
+ | Tool | Description | Type |
269
+ |------|-------------|------|
270
+ | `list_tabs` | List tabs across all windows | read |
271
+ | `read_page_content` | Read page text content | read |
272
+ | `get_current_tab` | Current active tab URL/title | read |
273
+ | `open_url` | Open URL in Safari | write |
274
+ | `close_tab` | Close a specific tab | destructive |
275
+ | `activate_tab` | Switch to a specific tab | write |
276
+ | `run_javascript` | Execute JavaScript in tab | write |
277
+ | `search_tabs` | Search tabs by title/URL | read |
278
+ | `list_bookmarks` | List all bookmarks across folders | read |
279
+ | `add_bookmark` | Add a bookmark to Safari | write |
280
+ | `list_reading_list` | List Reading List items | read |
281
+ | `add_to_reading_list` | Add URL to Reading List | write |
282
+
283
+ ### System (17 tools)
284
+
285
+ | Tool | Description | Type |
286
+ |------|-------------|------|
287
+ | `get_clipboard` | Read clipboard content | read |
288
+ | `set_clipboard` | Write to clipboard | write |
289
+ | `get_volume` | Get system volume | read |
290
+ | `set_volume` | Set system volume | write |
291
+ | `toggle_dark_mode` | Toggle dark/light mode | write |
292
+ | `get_frontmost_app` | Get frontmost application | read |
293
+ | `list_running_apps` | List running applications | read |
294
+ | `get_screen_info` | Display information | read |
295
+ | `show_notification` | Show system notification | write |
296
+ | `capture_screenshot` | Capture screenshot (full/window/selection) | write |
297
+ | `get_wifi_status` | WiFi connection status and signal | read |
298
+ | `toggle_wifi` | Turn WiFi on or off | write |
299
+ | `list_bluetooth_devices` | List paired Bluetooth devices | read |
300
+ | `get_battery_status` | Battery percentage, charging, time remaining | read |
301
+ | `get_brightness` | Get display brightness level | read |
302
+ | `set_brightness` | Set display brightness level | write |
303
+ | `toggle_focus_mode` | Toggle Do Not Disturb on or off | write |
304
+
305
+ ### Photos (9 tools)
306
+
307
+ | Tool | Description | Type |
308
+ |------|-------------|------|
309
+ | `list_albums` | List albums | read |
310
+ | `list_photos` | List photos in album | read |
311
+ | `search_photos` | Search photos by keyword | read |
312
+ | `get_photo_info` | Photo metadata details | read |
313
+ | `list_favorites` | List favorite photos | read |
314
+ | `create_album` | Create new album | write |
315
+ | `add_to_album` | Add photo to album | write |
316
+ | `import_photo` | Import photo from file (Swift/PhotoKit) | write |
317
+ | `delete_photos` | Delete photos by ID (Swift/PhotoKit) | destructive |
318
+
319
+ ### Messages (6 tools)
320
+
321
+ | Tool | Description | Type |
322
+ |------|-------------|------|
323
+ | `list_chats` | Recent conversations with participants | read |
324
+ | `read_chat` | Chat details (participants, last update) | read |
325
+ | `search_chats` | Search by name/participant/handle | read |
326
+ | `send_message` | Send iMessage/SMS text | write |
327
+ | `send_file` | Send file via iMessage/SMS | write |
328
+ | `list_participants` | List chat participants | read |
329
+
330
+ ### Shortcuts (10 tools)
331
+
332
+ | Tool | Description | Type |
333
+ |------|-------------|------|
334
+ | `list_shortcuts` | List available shortcuts | read |
335
+ | `run_shortcut` | Run shortcut by name | write |
336
+ | `search_shortcuts` | Search shortcuts by name | read |
337
+ | `get_shortcut_detail` | Shortcut details/actions | read |
338
+ | `create_shortcut` | Create a new shortcut via UI automation | write |
339
+ | `delete_shortcut` | Delete shortcut by name (macOS 13+) | destructive |
340
+ | `export_shortcut` | Export shortcut to .shortcut file | write |
341
+ | `import_shortcut` | Import shortcut from .shortcut file | write |
342
+ | `edit_shortcut` | Open shortcut in Shortcuts app for editing | write |
343
+ | `duplicate_shortcut` | Duplicate an existing shortcut | write |
344
+
345
+ ### UI Automation (6 tools)
346
+
347
+ | Tool | Description | Type |
348
+ |------|-------------|------|
349
+ | `ui_open_app` | Open app and read accessibility summary | read |
350
+ | `ui_click` | Click element by coordinates or text | write |
351
+ | `ui_type` | Type text into focused field | write |
352
+ | `ui_press_key` | Send key combinations | write |
353
+ | `ui_scroll` | Scroll in direction | write |
354
+ | `ui_read` | Read app accessibility tree | read |
355
+
356
+ ### Apple Intelligence (8 tools)
357
+
358
+ Requires macOS 26+ with Apple Silicon.
359
+
360
+ | Tool | Description | Type |
361
+ |------|-------------|------|
362
+ | `summarize_text` | On-device text summarization | read |
363
+ | `rewrite_text` | Rewrite with specified tone | read |
364
+ | `proofread_text` | Grammar/spelling correction | read |
365
+ | `generate_text` | Generate text with custom instructions via on-device AI | read |
366
+ | `generate_structured` | Generate structured JSON output with schema | read |
367
+ | `tag_content` | Content classification/tagging with confidence | read |
368
+ | `ai_chat` | Named multi-turn on-device AI session | read |
369
+ | `ai_status` | Check Foundation Model availability | read |
370
+
371
+ ### TV (6 tools)
372
+
373
+ | Tool | Description | Type |
374
+ |------|-------------|------|
375
+ | `tv_list_playlists` | List Apple TV playlists (library) | read |
376
+ | `tv_list_tracks` | List movies/episodes in playlist | read |
377
+ | `tv_now_playing` | Currently playing content | read |
378
+ | `tv_playback_control` | Play/pause/next/previous control | write |
379
+ | `tv_search` | Search movies/TV shows | read |
380
+ | `tv_play` | Play movie/episode by name | write |
381
+
382
+ ### Screen Capture (5 tools)
383
+
384
+ | Tool | Description | Type |
385
+ |------|-------------|------|
386
+ | `capture_screen` | Capture full screen screenshot (returns PNG image) | read |
387
+ | `capture_window` | Capture a specific app window | read |
388
+ | `capture_area` | Capture a screen region by coordinates | read |
389
+ | `list_windows` | List all visible windows with position/size | read |
390
+ | `record_screen` | Record screen for 1-60 seconds (.mov) | write |
391
+
392
+ ### Maps (6 tools)
393
+
394
+ | Tool | Description | Type |
395
+ |------|-------------|------|
396
+ | `search_location` | Search for a place in Apple Maps | write |
397
+ | `get_directions` | Get directions between two locations | write |
398
+ | `drop_pin` | Drop a pin at specific coordinates | write |
399
+ | `open_address` | Open a specific address in Apple Maps | write |
400
+ | `search_nearby` | Search for places near a location | write |
401
+ | `share_location` | Generate a shareable Apple Maps link | read |
402
+
403
+ ### Podcasts (6 tools)
404
+
405
+ | Tool | Description | Type |
406
+ |------|-------------|------|
407
+ | `list_podcast_shows` | List subscribed podcast shows | read |
408
+ | `list_podcast_episodes` | List episodes for a show | read |
409
+ | `podcast_now_playing` | Currently playing podcast episode | read |
410
+ | `podcast_playback_control` | Play, pause, next, previous | write |
411
+ | `play_podcast_episode` | Play a specific episode by name | write |
412
+ | `search_podcast_episodes` | Search episodes by keyword | read |
413
+
414
+ ## Resources
415
+
416
+ MCP resources provide live data from Apple apps via URI.
417
+
418
+ | URI | Description |
419
+ |-----|-------------|
420
+ | `notes://recent` | 10 most recent notes |
421
+ | `notes://recent/{count}` | Recent notes (custom count, max 50) |
422
+ | `calendar://today` | Today's calendar events |
423
+ | `calendar://upcoming` | Next 7 days of calendar events |
424
+ | `reminders://due` | Overdue reminders |
425
+ | `reminders://today` | Today's due reminders (incomplete only) |
426
+ | `music://now-playing` | Currently playing Apple Music track |
427
+ | `system://clipboard` | macOS clipboard content |
428
+ | `mail://unread` | Unread mail count across all mailboxes |
429
+ | `context://snapshot` | Unified context from all active apps |
430
+ | `context://snapshot/{depth}` | Configurable depth context (brief/standard/full) |
431
+
432
+ ## Prompts
433
+
434
+ ### Per-App
435
+ - **organize-notes** — Classify notes by topic, create folders, move
436
+ - **find-duplicates** — Find similar notes, compare, suggest cleanup
437
+ - **weekly-review** — Summarize past week's notes
438
+ - **organize-reminders** — Scan, identify overdue/completed, cleanup
439
+ - **daily-review** — Today's due reminders with priorities
440
+ - **schedule-review** — Upcoming events, conflicts, optimizations
441
+ - **meeting-prep** — Event details + related notes for meeting prep
442
+
443
+ ### Cross-Module
444
+ - **daily-briefing** — Today's events + due reminders + recent notes
445
+ - **weekly-digest** — Past N days: events + notes + reminders combined
446
+ - **meeting-notes-to-reminders** — Extract action items from meeting notes, create reminders
447
+ - **event-follow-up** — Create follow-up note and reminders after a meeting
448
+ - **research-with-safari** — Safari research + save results to Notes
449
+ - **focus-session** — Calendar + Reminders + Music focus session
450
+ - **file-organizer** — Finder file organization + Notes logging
451
+
452
+ ### Developer Workflows
453
+ - **dev-session** — Scan project, check specs, research docs, create session notes
454
+ - **debug-loop** — Capture errors from Safari/clipboard, locate code, log bugs, create fix tasks
455
+ - **screen-capture-flow** — Screenshot → Photos import → annotation notes
456
+ - **app-release-prep** — Calendar schedule + Notes changelog + Reminders checklist
457
+ - **idea-to-task** — Break idea into tasks → Reminders + Calendar time blocks
458
+ - **build-log** — Analyze build output, log errors or celebrate success
459
+
460
+ ### Shortcuts
461
+ - **shortcut-automation** — Discover and chain Siri Shortcuts for automation
462
+ - **shortcut-discovery** — Find relevant shortcuts for a task
463
+ - **shortcut-troubleshooting** — Debug and fix broken shortcuts
464
+
465
+ ## Developer Agent Pipeline
466
+
467
+ AirMCP's developer prompts connect Apple apps into autonomous agent workflows. Each prompt orchestrates tools across multiple modules — AI reads the actual filesystem, Notes, Calendar, and Reminders for context, then records structured results.
468
+
469
+ ```
470
+ ┌─────────────────────────────────────────────────────────────────┐
471
+ │ dev-session │
472
+ │ Finder (scan) → Notes (specs) → Safari (docs) → Notes (log) │
473
+ └─────────────────────────────────────────────────────────────────┘
474
+
475
+ ┌─────────────────────────────────────────────────────────────────┐
476
+ │ debug-loop │
477
+ │ Safari (JS errors) → Clipboard → Finder (locate) → │
478
+ │ Notes (bug log) → Reminders (fix tasks) │
479
+ └─────────────────────────────────────────────────────────────────┘
480
+
481
+ ┌─────────────────────────────────────────────────────────────────┐
482
+ │ idea-to-task │
483
+ │ Notes (idea) → AI (decompose) → Reminders (tasks) → │
484
+ │ Calendar (time blocks) │
485
+ └─────────────────────────────────────────────────────────────────┘
486
+
487
+ ┌─────────────────────────────────────────────────────────────────┐
488
+ │ build-log │
489
+ │ Finder (output) → Clipboard (log) → │
490
+ │ ┌ Fail → Notes (error log) → Reminders (fix tasks) │
491
+ │ └ Pass → Notification → Music (celebrate) → Notes (success) │
492
+ └─────────────────────────────────────────────────────────────────┘
493
+ ```
494
+
495
+ Designed for AI coding agents (Claude Code, Cursor, Copilot, etc.) to invoke via MCP prompts, turning your Mac into a context-aware development environment.
496
+
497
+ ## Module Presets
498
+
499
+ By default, new installations start with 5 core modules (Notes, Reminders, Calendar, Shortcuts, System) to keep things simple. You can enable more anytime:
500
+
501
+ ```bash
502
+ # Re-run the setup wizard to change modules
503
+ npx airmcp init
504
+
505
+ # Or enable all modules at once
506
+ npx airmcp --full
507
+ ```
508
+
509
+ Or edit `~/.config/airmcp/config.json` directly:
510
+
511
+ ```json
512
+ {
513
+ "disabledModules": ["messages", "intelligence"]
514
+ }
515
+ ```
516
+
517
+ ## CLI Commands
518
+
519
+ | Command | Description |
520
+ |---------|-------------|
521
+ | `npx airmcp init` | Interactive setup wizard |
522
+ | `npx airmcp doctor` | Diagnose installation issues |
523
+ | `npx airmcp` | Start MCP server (stdio, default) |
524
+ | `npx airmcp --full` | Start with all 18 modules enabled |
525
+ | `npx airmcp --http` | Start as HTTP server (port 3847) |
526
+
527
+ ## Configuration
528
+
529
+ ### Environment Variables
530
+
531
+ | Variable | Default | Description |
532
+ |----------|---------|-------------|
533
+ | `AIRMCP_INCLUDE_SHARED` | `false` | Include shared notes/folders |
534
+ | `AIRMCP_ALLOW_SEND_MESSAGES` | `true` | Allow sending iMessages |
535
+ | `AIRMCP_ALLOW_SEND_MAIL` | `true` | Allow sending emails |
536
+ | `AIRMCP_FULL` | `false` | Enable all modules (ignores preset) |
537
+ | `AIRMCP_DISABLE_{MODULE}` | — | Disable a specific module (e.g. `AIRMCP_DISABLE_MUSIC=true`) |
538
+ | `GEMINI_API_KEY` | — | Google Gemini API key for higher-quality embeddings (optional) |
539
+
540
+ ### Config File
541
+
542
+ `~/.config/airmcp/config.json`:
543
+
544
+ ```json
545
+ {
546
+ "disabledModules": ["messages", "intelligence"],
547
+ "includeShared": false,
548
+ "allowSendMessages": true,
549
+ "allowSendMail": true,
550
+ "hitl": {
551
+ "level": "destructive-only",
552
+ "timeout": 30
553
+ }
554
+ }
555
+ ```
556
+
557
+ ### Human-in-the-Loop (HITL)
558
+
559
+ Require manual approval before destructive operations:
560
+
561
+ ```json
562
+ {
563
+ "hitl": {
564
+ "level": "destructive-only",
565
+ "timeout": 30
566
+ }
567
+ }
568
+ ```
569
+
570
+ Levels: `off`, `destructive-only`, `all-writes`, `all`
571
+
572
+ ### Semantic Search (Optional)
573
+
574
+ On-device cross-app semantic search powered by Apple's NLContextualEmbedding. Find related notes, events, reminders, and emails by meaning — not just keywords.
575
+
576
+ ```bash
577
+ npm run swift-build # Build the Swift bridge first
578
+ ```
579
+
580
+ Then use the tools:
581
+ 1. `semantic_index` — Index data from enabled Apple apps into a local vector store
582
+ 2. `semantic_search` — Search by meaning across all indexed data
583
+ 3. `find_related` — Find items related to a specific note/event/reminder
584
+ 4. `semantic_status` — Check index status
585
+
586
+ Supports Korean, English, Japanese, Chinese with automatic language detection. Optionally set `GEMINI_API_KEY` for higher-quality Google Gemini embeddings.
587
+
588
+ ### Swift Bridge (Optional)
589
+
590
+ For semantic search, recurring events/reminders (EventKit), photo import/delete (PhotoKit), and Apple Intelligence — requires macOS 26+:
591
+
592
+ ```bash
593
+ npm run swift-build
594
+ ```
595
+
596
+ ## Requirements
597
+
598
+ - macOS
599
+ - Node.js >= 18
600
+ - Per-app automation permissions (prompted on first run) — use `setup_permissions` tool to request all at once
601
+ - Apple Intelligence: macOS 26+ with Apple Silicon
602
+
603
+ ## Limitations
604
+
605
+ Modules with OS requirements (e.g., Intelligence requires macOS 26+) are automatically disabled at startup on older systems via runtime OS detection.
606
+
607
+ ### Notes
608
+ - Move copies and deletes (new ID, reset dates, lost attachments). Update replaces entire body — read first to preserve content.
609
+ - Password-protected notes cannot be read.
610
+
611
+ ### Reminders / Calendar
612
+ - JXA recurrence is read-only — use `create_recurring_event`/`create_recurring_reminder` (Swift/EventKit).
613
+ - Calendar attendees are read-only.
614
+
615
+ ### Contacts
616
+ - Custom fields not accessible.
617
+
618
+ ### Mail
619
+ - Content truncated to 5000 chars by default (`maxLength` parameter adjustable).
620
+
621
+ ### Messages
622
+ - Individual message content (chat history) not accessible via JXA.
623
+ - Send requires recipient to be a registered buddy in Messages.
624
+
625
+ ### Music
626
+ - Smart playlists are read-only.
627
+ - Queue manipulation not available.
628
+
629
+ ### Finder
630
+ - Tags use Spotlight (mdfind), performance varies with index state.
631
+
632
+ ### Safari
633
+ - Reading page content requires "Allow JavaScript from Apple Events" in Safari Developer menu.
634
+
635
+ ### Photos
636
+ - JXA: album creation and photo addition only, no import/delete.
637
+ - Swift bridge (macOS 26+): full import/delete via PhotoKit.
638
+
639
+ ### Apple Intelligence
640
+ - Requires macOS 26 (Tahoe) + Apple Silicon.
641
+ - Build bridge binary with `npm run swift-build`.
642
+
643
+ ## License
644
+
645
+ MIT
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerCalendarPrompts(server: McpServer): void;