本地MCPmacOS
本地人 模型上下文协议(MCP) 该服务器将macOS原生应用程序(Apple Reminder、Notes等)作为Claude等人工智能助手可访问的工具。
概述
LocalMCPmacOS通过MCP标准连接AI助手和macOS本地应用程序。它作为Mac上的本地服务器运行,可选地在Docker容器内运行,并通过AppleScript/JXA与macOS应用程序通信。
Claude (or other AI) ──MCP──► LocalMCPmacOS Server ──AppleScript──► Apple Reminders / Notes / ...Docker注意事项: 因为此服务器通过AppleScript与macOS本地应用程序交互,所以Docker容器必须在 主机MAC (不是远程Linux主机),需要访问主机的AppleScript环境。容器用于隔离和依赖管理,而不是可移植性。
工具/集成
| 工具前缀 | 描述 |
|---|---|
reminders_* | 创建、阅读、完成和删除Apple提醒和列表 |
notes_* | 创建、阅读、搜索和更新Apple Notes和文件夹 |
calendar_* | 在Apple日历中列出日历、查询和创建事件 |
contacts_* | 从Apple联系人中搜索和检索联系人 |
需求
- macOS(建议使用蒙特利12或更高版本)
- Python 3.11+
- Docker Desktop for Mac(用于容器化部署)
- 为服务器进程授予的可访问性/自动化权限
运行一切
选项A——本地(无Docker)
这是最简单的设置。MCP服务器直接在您的Mac上运行并调用 osascript 本身。
1.克隆并安装
git clone https://github.com/furkanayik/LocalMCPmacOS.git
cd LocalMCPmacOS
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt2.授予自动化权限
打开 系统设置→ 隐私和安全→ 自动化 并启用终端(或运行服务器的任何应用程序)来控制提醒、笔记、日历和联系人。
3.启动MCP服务器
python -m localmcp服务器监听stdio,并准备接受MCP连接。
4.连接克劳德
将此添加到您的 claude_desktop_config.json (克劳德桌面)或克劳德代码MCP设置:
{
"mcpServers": {
"localmcp": {
"command": "/path/to/LocalMCPmacOS/.venv/bin/python",
"args": ["-m", "localmcp"],
"cwd": "/path/to/LocalMCPmacOS"
}
}
}______________________________________________________________________
选项B——Docker
由于AppleScript仅适用于macOS,因此容器无法调用 osascript 直接。相反,一个轻量级的 网桥守护进程 在主机上运行,并通过Unix套接字中继来自容器的请求。
Docker container (MCP server) ──Unix socket──► Host bridge daemon ──osascript──► macOS apps1.克隆并构建映像
git clone https://github.com/furkanayik/LocalMCPmacOS.git
cd LocalMCPmacOS
docker build -t localmcpmacos .2.授予自动化权限
打开 系统设置→ 隐私和安全→ 自动化 并启用终端(或Python)来控制提醒、笔记、日历和联系人。
3.启动主机网桥守护进程 (在macOS上运行,Docker之外)
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python -m bridge.host_daemon
# → LocalMCP bridge daemon listening on /tmp/localmcp/bridge.sock保持这个终端打开。守护进程必须在容器启动之前运行。
4.启动容器
在第二个终端中:
docker compose up或手动:
docker run --rm -i \
-e LOCALMCP_BRIDGE_SOCKET=/tmp/localmcp/bridge.sock \
-v /tmp/localmcp:/tmp/localmcp \
localmcpmacos5.连接克劳德
{
"mcpServers": {
"localmcp": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "LOCALMCP_BRIDGE_SOCKET=/tmp/localmcp/bridge.sock",
"-v", "/tmp/localmcp:/tmp/localmcp",
"localmcpmacos"
]
}
}
}Claude通过stdio为每个会话生成容器——主机上的网桥守护进程必须已经在运行。
建筑
localmcp/
├── server.py # MCP server entry point (stdio transport)
├── runner.py # osascript runner: native or Docker bridge mode
├── tools/
│ ├── reminders.py # Apple Reminders tool handlers
│ ├── notes.py # Apple Notes tool handlers
│ ├── calendar.py # Apple Calendar tool handlers
│ └── contacts.py # Apple Contacts tool handlers
└── applescript/
├── reminders/ # AppleScript files for Reminders
├── notes/ # AppleScript files for Notes
├── calendar/ # AppleScript files for Calendar
└── contacts/ # AppleScript files for Contacts
bridge/
├── host_daemon.py # Host-side Unix socket daemon (runs osascript)
└── protocol.py # Shared request/response JSON schema- MCP服务器通过以下方式进行通信 标准 (标准MCP传输)。
- 每个工具处理程序通过以下方式运行相应的AppleScript
osascript. - 在Docker模式下,AppleScript调用通过Unix套接字桥中继到主机。
macOS权限
首次运行时,macOS将提示输入“自动化”权限。您也可以手动授予它们:
系统设置→ 隐私和安全→ 自动化 --允许终端(或容器运行时)访问以控制提醒和注释。
发展
# Install dev dependencies
pip install -r requirements-dev.txt
# Run tests
pytest
# Lint
ruff check .TODO/第2阶段
- HTTP/SSE传输 --通过以下方式提供多客户端支持
mcp.server.sse用于单个stdio连接之外的用例 - 认证 -用于HTTP服务器的API密钥或基于令牌的身份验证
- 其他macOS集成 --消息、邮件、Safari书签、系统事件
- 结构化输出 --返回类型化数据模型,而不是原始JSON字符串
- 流媒体 --大型笔记/事件列表作为进度更新流式传输
贡献者
许可证
麻省理工学院
