apple-mcp

apple-mcp

A unified MCP server for macOS native apps, currently supporting Calendar and Reminders via EventKit with bidirectional sync, and Mail planned.

Category
访问服务器

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

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选
mcp-server-qdrant

mcp-server-qdrant

这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。

官方
精选
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选