apple-tools-mcp 1.0.1__tar.gz

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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Apple MCP Contributors
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.
@@ -0,0 +1,376 @@
1
+ Metadata-Version: 2.4
2
+ Name: apple-tools-mcp
3
+ Version: 1.0.1
4
+ Summary: Unified Apple ecosystem MCP server for macOS
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://github.com/JonathanRReed/Apple-MCPs
7
+ Project-URL: Repository, https://github.com/JonathanRReed/Apple-MCPs
8
+ Project-URL: Changelog, https://github.com/JonathanRReed/Apple-MCPs/blob/main/CHANGELOG.md
9
+ Project-URL: Issues, https://github.com/JonathanRReed/Apple-MCPs/issues
10
+ Keywords: mcp,model-context-protocol,macos,apple,ai-agent,automation
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: MacOS X
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: MacOS
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: apple-mcp-common<2,>=1.0.0
24
+ Requires-Dist: apple-calendar-mcp<2,>=1.0.0
25
+ Requires-Dist: apple-contacts-mcp<2,>=1.0.0
26
+ Requires-Dist: apple-files-mcp<2,>=1.0.0
27
+ Requires-Dist: apple-mcp-mail<2,>=1.0.0
28
+ Requires-Dist: apple-maps-mcp<2,>=1.0.0
29
+ Requires-Dist: apple-messages-mcp<2,>=1.0.0
30
+ Requires-Dist: apple-mcp-notes<2,>=1.0.0
31
+ Requires-Dist: apple-mcp-reminders<2,>=1.0.0
32
+ Requires-Dist: apple-shortcuts-mcp<2,>=1.0.0
33
+ Requires-Dist: apple-system-mcp<2,>=1.0.0
34
+ Requires-Dist: mcp<3,>=2.0.0
35
+ Requires-Dist: pydantic>=2.12.0
36
+ Provides-Extra: dev
37
+ Requires-Dist: pytest<10,>=8; extra == "dev"
38
+ Requires-Dist: ruff<1,>=0.12; extra == "dev"
39
+ Dynamic: license-file
40
+
41
+ <!-- mcp-name: io.github.jonathanrreed/apple-tools-mcp -->
42
+
43
+ # Apple-Tools-MCP
44
+
45
+ Unified MCP server for Apple apps on macOS.
46
+
47
+ One entrypoint for Mail, Calendar, Reminders, Messages, Contacts, Notes, Shortcuts, Files, System, and Maps. This server wraps the standalone servers and exposes a unified MCP interface.
48
+
49
+ ## What It Does
50
+
51
+ - Read context across multiple Apple apps
52
+ - Unified actions across all apps
53
+ - Prompts for day planning, communications triage, and meeting prep
54
+ - Persistent defaults for mail, calendar, reminders, notes, and communication routing
55
+ - Per-contact preferences for people who always route a specific way
56
+ - Helper workflows for communication routing, archiving mail, capturing follow-ups, and collaboration summaries
57
+ - Mail thread helpers and Contacts method editing in one place
58
+ - Preview, audit, and undo for reversible actions
59
+ - Files-aware attachment and document workflows within scoped roots
60
+ - System-aware workflows using the frontmost app, clipboard, notifications, running apps, and assistant-relevant macOS settings
61
+ - Truthful Focus context and combined system snapshots for briefing and routing
62
+ - Explicit macOS settings writes for appearance, Finder, Dock, and key accessibility preferences
63
+ - Bounded GUI fallback tools when a native app-domain MCP cannot complete a task directly
64
+ - Finder-aware file workflows, Finder tags, recent locations, and iCloud Drive awareness through Apple Files
65
+ - Travel-aware workflows using Apple Maps for place search and route estimates
66
+ - Daily briefing, weekly briefing, and communications-triage tools
67
+ - Prompt fallback via `apple_list_prompts` and `apple_get_prompt`
68
+ - One install target instead of ten separate configurations
69
+
70
+ ## When to use
71
+
72
+ - Personal assistant workflows across multiple Apple apps
73
+ - Cross-app operations (e.g., Calendar and Reminders together)
74
+ - Simpler setup without wiring each standalone MCP separately
75
+
76
+ ## Tool Discovery
77
+
78
+ Apple-Tools-MCP exposes its full tool surface through `tools/list`, with `readOnlyHint`/`destructiveHint` annotations and structured output schemas — modern clients defer-load large tool surfaces themselves. For context-constrained clients:
79
+
80
+ - `search_tools` finds tools by name, aliases, and domain tags
81
+ - `get_tool_info` loads the full schema and examples for one tool on demand
82
+ - generated code-mode wrappers are exported under `generated/tool_wrappers/python`
83
+
84
+ ## Install On This Mac
85
+
86
+ <details>
87
+ <summary>Quick start (uvx, from PyPI)</summary>
88
+
89
+ With [uv](https://docs.astral.sh/uv/getting-started/installation/) installed:
90
+
91
+ ```bash
92
+ uvx apple-tools-mcp
93
+ ```
94
+
95
+ No clone, no venv management.
96
+
97
+ </details>
98
+
99
+ <details>
100
+ <summary>From a clone</summary>
101
+
102
+ ```bash
103
+ git clone https://github.com/JonathanRReed/Apple-MCPs.git
104
+ cd Apple-MCPs
105
+ uv sync --all-packages
106
+ ```
107
+
108
+ This builds one uv workspace environment with the unified entrypoint at `.venv/bin/apple-tools-mcp` plus every standalone server's console script (`bash scripts/install_all.sh` does the same, with a venv fallback for machines without uv). You can also point an MCP client at `Apple-Tools-MCP/start.sh`, which prefers `uv run` and falls back to a plain venv bootstrap (Python 3.11+ required).
109
+
110
+ </details>
111
+
112
+ ## Install In AI Agents
113
+
114
+ <details>
115
+ <summary>Generic MCP client config</summary>
116
+
117
+ ```json
118
+ {
119
+ "mcpServers": {
120
+ "apple-tools": {
121
+ "command": "uvx",
122
+ "args": ["apple-tools-mcp"],
123
+ "env": {
124
+ "APPLE_MAIL_MCP_SAFETY_PROFILE": "full_access",
125
+ "APPLE_CALENDAR_MCP_SAFETY_MODE": "safe_manage",
126
+ "APPLE_REMINDERS_MCP_SAFETY_MODE": "safe_manage",
127
+ "APPLE_FILES_MCP_ALLOWED_ROOTS": "/Users/you/Desktop,/Users/you/Documents,/Users/you/Downloads,/Users/you/Library/Mobile Documents/com~apple~CloudDocs",
128
+ "APPLE_FILES_MCP_SAFETY_MODE": "safe_manage",
129
+ "APPLE_SYSTEM_MCP_SAFETY_MODE": "safe_manage",
130
+ "APPLE_CONTACTS_MCP_SAFETY_MODE": "safe_manage",
131
+ "APPLE_NOTES_MCP_SAFETY_MODE": "full_access",
132
+ "APPLE_MESSAGES_MCP_SAFETY_MODE": "full_access",
133
+ "APPLE_SHORTCUTS_MCP_SAFETY_MODE": "full_access"
134
+ }
135
+ }
136
+ }
137
+ }
138
+ ```
139
+
140
+ Running from a clone instead? Use `/path/to/Apple-MCPs/Apple-Tools-MCP/start.sh` as the command with empty `args`.
141
+
142
+ </details>
143
+
144
+ <details>
145
+ <summary>Claude Code example</summary>
146
+
147
+ ```bash
148
+ claude mcp add --transport stdio --scope project apple-tools -- uvx apple-tools-mcp
149
+ ```
150
+
151
+ </details>
152
+
153
+ ## What It Exposes
154
+
155
+ - Health and overview tools across all apps
156
+ - Cross-app prompts
157
+ - Delegated tools from Mail, Calendar, Reminders, Messages, Contacts, Notes, Shortcuts, Files, System, and Maps
158
+ - Suggestions and permission guides
159
+ - Files, System, and Maps resources and prompts
160
+ - Unified wrappers for Focus, system context, Finder reveal, file open, and file tagging
161
+ - Preference tools: get, detect, and update defaults and contact preferences
162
+ - Communication tools: prepare, send, preview
163
+ - Workflow tools: archive, create reminders and notes with defaults, preview those defaulted writes, capture follow-ups, preview follow-up capture, and summarize event collaboration
164
+ - Launch-hardening tools: strict Maps wrappers, duplicate-contact detection, digest-folder helpers, and Shortcut bridge routing
165
+ - Audit tools: list recent actions and undo
166
+ - Briefing tools: daily, weekly, and communications triage
167
+ - Prompt fallback: `apple_list_prompts` and `apple_get_prompt`
168
+ - Mail thread tools: get, reply, archive
169
+ - Contacts mutation: create, update, delete with labeled methods
170
+ - Calendar and Messages permission diagnostics
171
+ - Launch and recovery: `apple_health`, `apple_permission_guide`, `apple_recheck_permissions`
172
+
173
+ ## Assistant Defaults
174
+
175
+ Apple-Tools-MCP can persist a lightweight assistant state file with defaults for:
176
+
177
+ - default mail account
178
+ - default archive mailbox
179
+ - default calendar
180
+ - default reminders list
181
+ - default notes folder
182
+ - preferred communication channel, `messages`, `mail`, or `auto`
183
+ - preferred message target type, `phone`, `email`, or `auto`
184
+ - per-contact preferred channel and target overrides for specific people
185
+
186
+ Detect and persist sensible defaults with `apple_detect_defaults`, inspect them with `apple_get_preferences`, and override them with `apple_update_preferences`.
187
+
188
+ By default the state file is stored at `~/.apple-tools-mcp/preferences.json`. Override it with `APPLE_AGENT_MCP_STATE_FILE`.
189
+
190
+ Apple-Tools-MCP also stores recent assistant actions in `~/.apple-tools-mcp/actions.json` so the unified server can expose audit history and undo for reversible operations.
191
+
192
+ ## How to Work With It
193
+
194
+ - Resolve people through Contacts first, then decide between Messages or Mail based on saved defaults.
195
+ - Set per-contact preferences for people who always prefer a specific channel.
196
+ - Preview risky actions and defaulted create flows when the client wants confirmation.
197
+ - Use Mail thread helpers when the user refers to a conversation, not a single message.
198
+ - Set defaults early (archive mailbox, calendar, reminders list, notes folder) so the assistant doesn't keep asking.
199
+ - Keep contact info current so communication routing works reliably.
200
+ - Use Files before Mail, Messages, Notes, or Shortcuts when the request involves local documents.
201
+ - Check System context before interruptive actions, especially when the frontmost app, clipboard, or battery state matters.
202
+ - Treat Focus support as truthful best-effort. Use it when available, and do not invent a current Focus mode if the MCP reports unsupported on the local setup.
203
+ - Use `apple_update_system_setting` for macOS preference changes and `apple_control_frontmost_app` only when a native app-domain tool cannot complete the task.
204
+ - Prefer explicit System settings tools over generic GUI automation when the request is really a macOS preference change.
205
+ - Use GUI fallback tools only when the native domain MCP cannot complete the task and the client has granted Accessibility access.
206
+ - Use native Maps MCP tools for maps search and directions. Do not substitute shell, web, or external map providers when validating supported Maps behavior.
207
+ - Use Shortcuts as the explicit bridge when native domain support is missing, rather than ad hoc shell or GUI work.
208
+ - Use the dedicated digest folder helpers before saving daily or weekly briefings into Notes.
209
+ - Use Maps when routing or travel time affects scheduling or communication.
210
+ - Use `apple_list_recent_actions` and `apple_undo_action` for reversible operations.
211
+ - When Mail must use a specific sender identity, pass the exact sender email in `from_account`, not just an account nickname.
212
+
213
+ ## macOS Permissions
214
+
215
+ - Mail needs Automation access to Mail
216
+ - Calendar needs Calendar access
217
+ - Reminders needs Reminders access
218
+ - Messages needs Automation access to Messages, plus Full Disk Access for history
219
+ - Contacts needs Contacts access
220
+ - Notes needs Automation access to Notes
221
+ - Shortcuts usually works without a separate privacy prompt
222
+ - Files access is controlled by `APPLE_FILES_MCP_ALLOWED_ROOTS`, not by a macOS privacy prompt
223
+ - System actions may trigger System Events, Accessibility, or automation prompts depending on the host app
224
+ - Focus status is best-effort and truthful on unsigned local installs
225
+ - Notification Center history is not claimed where macOS does not expose it cleanly
226
+ - Maps does not need a privacy prompt, but search and directions require the local Swift helper to compile
227
+
228
+ ## Launch Checklist
229
+
230
+ - Add `uvx apple-tools-mcp` (or a clone's `Apple-Tools-MCP/start.sh` / installed `.venv/bin/apple-tools-mcp` entrypoint) to your MCP client
231
+ - Reload or reconnect the client so the Apple-Tools-MCP tool surface is loaded into context
232
+ - Call `apple_health` first to verify every domain
233
+ - If a domain is blocked, call `apple_permission_guide`
234
+ - After changing macOS permissions, call `apple_recheck_permissions`
235
+
236
+ ## Transports and Protocol Verification
237
+
238
+ `stdio` is the default and recommended transport. Set `APPLE_AGENT_MCP_TRANSPORT=streamable-http` (with optional `APPLE_AGENT_MCP_HOST` and `APPLE_AGENT_MCP_PORT`) to serve Streamable HTTP instead — used below for protocol validation.
239
+
240
+ ### Official MCP conformance
241
+
242
+ Start Apple-Tools-MCP in conformance mode:
243
+
244
+ ```bash
245
+ cd /path/to/Apple-MCPs/Apple-Tools-MCP
246
+ APPLE_AGENT_MCP_TRANSPORT=streamable-http \
247
+ APPLE_AGENT_MCP_PORT=8765 \
248
+ APPLE_AGENT_MCP_CONFORMANCE_MODE=1 \
249
+ ./start.sh
250
+ ```
251
+
252
+ Then run the official active suite:
253
+
254
+ ```bash
255
+ npx -y @modelcontextprotocol/conformance server \
256
+ --url http://127.0.0.1:8765/mcp \
257
+ --suite active
258
+ ```
259
+
260
+ `APPLE_AGENT_MCP_CONFORMANCE_MODE=1` adds an opt-in MCP conformance surface covering content types, resources, resource templates, prompts, progress, and completion (fixtures for features removed by spec 2026-07-28 are intentionally absent). It is intended for CI and protocol testing, not normal assistant use.
261
+
262
+ The briefing and triage tools (`apple_generate_daily_briefing`, `apple_generate_weekly_briefing`, `apple_triage_communications_task`) are standard synchronous tools — the experimental MCP tasks API they previously used was removed from the spec (SEP-1686) and SDK, with the same tool names and results.
263
+
264
+ ## Launch Docs
265
+
266
+ - [Golden Workflows](../docs/launch/golden-workflows.md)
267
+ - [Failure Modes](../docs/launch/failure-modes.md)
268
+ - [Compatibility and Version Pinning](../docs/launch/compatibility.md)
269
+ - [Code Mode](../docs/code-mode.md)
270
+ - [Demo Script](../docs/launch/demo-script.md)
271
+ - [Checklist Template Prompt](../docs/launch/prompts/checklist-template.md)
272
+
273
+ ### Inspector CLI smoke check
274
+
275
+ From this server directory:
276
+
277
+ ```bash
278
+ npx -y @modelcontextprotocol/inspector --cli bash ./start.sh --method tools/list
279
+ npx -y @modelcontextprotocol/inspector --cli bash ./start.sh --method prompts/list
280
+ npx -y @modelcontextprotocol/inspector --cli bash ./start.sh --method resources/list
281
+ ```
282
+
283
+ For the full repo-wide smoke pass, run:
284
+
285
+ ```bash
286
+ cd /path/to/Apple-MCPs
287
+ bash scripts/inspector_smoke.sh
288
+ ```
289
+
290
+ ## Agent Routing Prompt
291
+
292
+ ```xml
293
+ <apple_tools>
294
+ `tools/list` returns the full tool surface. If context is constrained, use `search_tools` first, then `get_tool_info` only for the tools you plan to call.
295
+
296
+ <routing>
297
+ <imessage trigger="text, message, msg, iMessage">
298
+ Resolve recipient via Contacts first. Confirm if multiple matches.
299
+ Omit service_name parameter entirely.
300
+ </imessage>
301
+
302
+ <contacts trigger="lookup, phone number, email, contact">
303
+ Run before any iMessage or Mail action.
304
+ </contacts>
305
+
306
+ <mail trigger="email, mail, inbox, draft, reply">
307
+ Search requires a query string (sender, subject, or "*" as wildcard). No list-all endpoint.
308
+ If text vs. email is ambiguous, ask once.
309
+ </mail>
310
+
311
+ <calendar trigger="calendar, event, schedule, appointment, meeting, block time">
312
+ Confirm date, time, duration, and title before writing.
313
+ </calendar>
314
+
315
+ <reminders trigger="remind me, task, to-do, don't forget">
316
+ Reminders are organized into lists. Identify available lists on first use and set a default.
317
+ due_date requires timezone offset: yyyy-MM-ddTHH:mm:ss-HH:00
318
+ </reminders>
319
+
320
+ <notes trigger="note, jot down, write this down, save this">
321
+ Multiple accounts may have a "Notes" folder. Identify them on first use and set a default.
322
+ Use for reference only. Time-sensitive items go to Reminders or Calendar.
323
+ </notes>
324
+
325
+ <shortcuts trigger="shortcut, automation, run shortcut">
326
+ List available shortcuts before running if request is vague.
327
+ </shortcuts>
328
+
329
+ <files trigger="file, folder, attachment, document, download, desktop">
330
+ Use Files before Mail, Messages, Notes, or Shortcuts when the request references local paths or attachments.
331
+ Confirm the exact path before mutation or send actions.
332
+ </files>
333
+
334
+ <system trigger="clipboard, frontmost app, battery, notification, open app">
335
+ Use System when local desktop context affects the next action.
336
+ Keep writes scoped unless the user clearly asked for a notification, clipboard update, or app launch.
337
+ </system>
338
+
339
+ <maps trigger="map, directions, route, commute, eta, address, place">
340
+ Use Maps when place lookup or travel time affects scheduling or communication.
341
+ Confirm origin, destination, and transport mode for time-sensitive plans.
342
+ </maps>
343
+ </routing>
344
+
345
+ <disambiguation>
346
+ 1. Has due date/time -> Reminders
347
+ 2. Reference material, no action -> Notes
348
+ 3. Involves another person -> iMessage or Mail (Contacts first)
349
+ 4. Text vs. email unclear -> ask once
350
+ </disambiguation>
351
+
352
+ <known_gotchas>
353
+ - service_name on iMessage calls causes error (-1728). Omit it.
354
+ - Bare timestamps without timezone offset fail on Reminders.
355
+ - Mail has no "list recent" endpoint. Always pass a search query.
356
+ - Use `search_tools` plus `get_tool_info` to inspect tools without loading every schema into context.
357
+ - Multiple Notes folders exist across accounts. Pick one default.
358
+ - Files access is limited to APPLE_FILES_MCP_ALLOWED_ROOTS.
359
+ - Some System actions depend on host app automation approval.
360
+ - Maps search and directions depend on the local Swift helper and Xcode command line tools.
361
+ </known_gotchas>
362
+ </apple_tools>
363
+ ```
364
+
365
+ ## Related Servers
366
+
367
+ - [Apple Files MCP](../AppleFiles-MCP/README.md)
368
+ - [Apple System MCP](../AppleSystem-MCP/README.md)
369
+ - [Apple Maps MCP](../AppleMaps-MCP/README.md)
370
+ - [Apple Mail MCP](../AppleMail-MCP/README.md)
371
+ - [Apple Calendar](../Apple-Calendar-MCP/README.md)
372
+ - [Apple Reminders MCP](../AppleReminders-MCP/README.md)
373
+ - [Apple Messages MCP](../AppleMessages-MCP/README.md)
374
+ - [Apple Contacts MCP](../AppleContacts-MCP/README.md)
375
+ - [Apple Notes MCP](../AppleNotes-MCP/README.md)
376
+ - [Apple Shortcuts MCP](../AppleShortcuts-MCP/README.md)