apple-mcp
A unified MCP server for macOS native apps, currently supporting Calendar and Reminders via EventKit with bidirectional sync, and Mail planned.
README
mac-mcp
One consolidated MCP server for native macOS apps — Calendar & Reminders read/write, plus read-only context and a few actions across Mail, Notes, Contacts, Photos, Safari, Messages, and Shortcuts. Python + FastMCP 2.0, managed with uv.
Replaces the two Apple MCP servers a life-cockpit otherwise juggles (apple-events + a forked
Apple Mail MCP) with a single modular adapter layer you own. Every read returns pointers
(id + one-line summary + open-in-app deeplink), never full bodies — so it structurally avoids
the context-bloat bug of the archived flagship server.
See DESIGN.md for the rationale and CHANGELOG.md for what's landed.
Tools
Reads return pointers; results are capped per adapter. Writes/actions are skipped entirely when
MAC_MCP_READ_ONLY is set (see below).
Calendar & Reminders — read/write (EventKit)
| Tool | Args | Notes |
|---|---|---|
events |
when = today | week | YYYY-MM-DD |
list events as pointers |
reminders |
due = today | overdue | this-week | a list name |
list reminders as pointers |
calendars |
— | calendars (id + name) to target writes |
reminder_lists |
— | reminder lists (id + name) to target writes |
create_event / update_event |
title, start, end (ISO), calendar, location, notes, all_day, recurrence |
update is a full replace by id |
delete_event |
id | |
create_reminder / update_reminder |
title, due, list_name, notes, priority (0–9), start, recurrence |
update is a full replace by id |
complete_reminder |
id | marks complete |
Recurrence is an RFC 5545 RRULE string — the FREQ / INTERVAL / COUNT / UNTIL
subset (e.g. FREQ=WEEKLY;INTERVAL=2;COUNT=10). A recurring reminder requires a due date;
unsupported parts (BYDAY, …) are rejected rather than silently ignored.
Read-only context (AppleScript / CLI)
| Tool | Args | Returns |
|---|---|---|
mail |
subject substring | inbox matches (subject + sender) |
notes |
title substring | matching notes (id + title) |
contacts |
name substring | cards (name, org, first phone + email) |
photos |
search string | media (filename); matches the Photos search field |
safari_tabs |
— | every open tab (url + title) |
messages_chats |
— | conversation list (id + name; no message content) |
shortcuts |
name substring (empty = all) | the user's Shortcuts (name) |
ping |
— | health check |
Actions (writes)
| Tool | Args | Notes |
|---|---|---|
create_contact |
given_name, family_name, organization | |
run_shortcut |
name, optional input_text |
runs a Shortcut; returns a bounded output snippet |
safari_open |
url | opens in a new tab; bare host → https://; only http/https allowed |
Read-only mode
Set MAC_MCP_READ_ONLY=1 (or true / yes) to register reads only — every write and action
tool above is skipped, a safe-deploy guard.
Develop
uv sync
uv run pytest # unit tests (mock at the adapter boundary)
uv run pytest -m integration # real macOS / EventKit / TCC — run manually, never in CI
uv run ruff check . # lint (config in pyproject.toml)
uv run ruff format . # format
uv run mac-mcp # run the server (stdio)
ruff (lint + format, line-length 88) and pytest gate CI — full workflow in CONTRIBUTING.md.
Use as an MCP server
Launch off the project's own venv python — deterministic, and it carries the locked PyObjC wheels:
{
"mcpServers": {
"mac-mcp": {
"command": "/Users/you/Developer/mac-mcp/.venv/bin/python",
"args": ["-m", "mac_mcp"]
}
}
}
macOS only. Calendar/Reminders use EventKit; the other adapters script their apps via Automation. Grant access when macOS prompts (TCC) — the first call to each app triggers its permission dialog.
Prior art & credits
mac-mcp builds on prior work — the Apple Mail MCP it draws from, the EventKit/Photos servers it references, the project that pioneered the unified-Apple-MCP pattern, and FastMCP / PyObjC / the MCP spec it depends on. See CREDITS.md. </content>
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。