Python Apple MCP 是一个使用 FastMCP 处理 macOS 应用(如 Contacts、Notes、Mail、Messages、Reminders、Calendar 和 Maps)的 Python 服务器实现,可与 macOS 原生应用高效交互。
Python Apple MCP 借助 Apple 脚本与 macOS 原生应用交互,为开发者提供了便捷的方式来操作这些应用。下面将详细介绍如何快速上手。
按照以下步骤完成项目的安装:
git clone https://github.com/jxnl/python-apple-mcp.git
cd python-apple-mcp
python -m venv venv
source venv/bin/activate # 在 Windows 上:venv\Scripts\activate
pip install -r requirements.txt
pip install -r requirements-test.txt
from apple_mcp import FastMCP, Context
from typing import List
from models.contact import Contact
# 初始化 FastMCP 服务器
mcp = FastMCP("Apple MCP")
# 使用工具
@mcp.tool()
def find_contact(name: str) -> List[Contact]:
"""按名称搜索联系人"""
# 实现代码在此处
pass
# 运行服务器
if __name__ == "__main__":
mcp.run()
from utils.contacts import ContactsModule
from utils.notes import NotesModule
import asyncio
# 初始化模块
contacts = ContactsModule()
notes = NotesModule()
# 使用模块
async def main():
# 查找联系人
contact = await contacts.find_contact("John")
# 创建笔记
await notes.create_note(
title="会议记录",
body="讨论要点...",
folder_name="工作"
)
# 运行异步代码
asyncio.run(main())
pytest
pytest --cov=utils tests/
pytest tests/test_contacts.py
find_contact(name: str) -> List[Contact]:按名称搜索联系人get_all_contacts() -> List[Contact]:获取所有联系人create_contact(name: str, phones: List[str]) -> Contact:创建新联系人find_note(query: str) -> List[Note]:搜索笔记create_note(title: str, body: str, folder_name: str) -> Note:创建新笔记get_all_notes() -> List[Note]:获取所有笔记send_email(to: str, subject: str, body: str) -> str:发送电子邮件search_emails(query: str) -> List[Email]:搜索邮件get_all_emails() -> List[Email]:获取所有邮件send_message(to: str, text: str) -> Message:发送消息search_messages(query: str) -> List[Message]:搜索消息get_all_messages() -> List[Message]:获取所有消息create_reminder(title: str, due_date: datetime) -> Reminder:创建提醒search_reminders(query: str) -> List[Reminder]:搜索提醒get_all_reminders() -> List[Reminder]:获取所有提醒create_event(title: str, start_date: datetime, end_date: datetime) -> Event:创建事件search_events(query: str) -> List[Event]:搜索事件get_all_events() -> List[Event]:获取所有事件get_directions(start: Location, end: Location) -> Directions:获取路线search_places(name: str) -> List[Place]:搜索地点get_map_image(bounds: Bounds) -> bytes:获取地图图像欢迎贡献!请参考项目仓库中的 CONTRIBUTING.md 文件。
此项目受 MIT License 保护。