Apple MCP(모델 컨텍스트 프로토콜) 도구
Claude와 같은 AI 어시스턴트가 Model Context Protocol(MCP)을 통해 Apple 애플리케이션 및 서비스와 상호 작용할 수 있도록 하는 도구 모음입니다.
개요
이 패키지는 다음을 포함하여 다양한 Apple 애플리케이션 및 서비스와 상호 작용하기 위한 MCP 도구를 제공합니다.
- 연락처 : Apple 연락처 앱에서 연락처 검색 및 검색
- 메모 : Apple Notes 앱에서 메모 검색, 검색, 생성 및 폴더 나열
- 메시지 : 메시지 보내기, 읽기, 예약하기, 읽지 않은 메시지 확인하기
- 메일 : 읽지 않은 이메일 읽기, 이메일 검색, 이메일 보내기
- 미리 알림 : Apple 미리 알림 앱에서 미리 알림을 검색, 생성 및 엽니다.
- 캘린더 : Apple 캘린더 앱에서 캘린더 이벤트를 검색, 생성 및 엽니다.
- 지도 : 위치 검색, 가이드 관리, 즐겨찾기 저장, 길찾기
- 웹 검색 : DuckDuckGo를 사용하여 웹을 검색하고 검색 결과에서 콘텐츠를 검색합니다.
설치
지엑스피1
요구 사항
- macOS 운영 체제
- Node.js 18+ 또는 Bun 런타임
- Apple 애플리케이션(연락처, 메모, 메시지, 메일 등)에 접근하기 위한 적절한 권한
용법
MCP 서버 시작
# Using the CLI
npx apple-mcp
# Using bun
bun run dev
클로드에 연결
Claude에서 이러한 도구를 사용하려면 MCP 서버를 Claude에 연결해야 합니다. MCP 프록시를 사용하거나, Claude 인터페이스가 있는 경우 직접 연결할 수 있습니다.
# Example using mcp-proxy
mcp-proxy --server "bun run /path/to/apple-mcp/index.ts"
도구 예제
콘택트 렌즈
// Search for a contact by name
{
"operation": "contacts",
"name": "John Doe"
}
// List all contacts
{
"operation": "contacts"
}
노트
// Search for notes containing specific text
{
"operation": "notes",
"operation": "search",
"searchText": "meeting notes"
}
// Create a new note
{
"operation": "notes",
"operation": "create",
"title": "Shopping List",
"body": "- Milk\n- Eggs\n- Bread",
"folderName": "Personal"
}
// List all notes in a folder
{
"operation": "notes",
"operation": "list",
"folderName": "Work"
}
// List all folders
{
"operation": "notes",
"operation": "listFolders"
}
// Create a new folder
{
"operation": "notes",
"operation": "createFolder",
"folderName": "Projects"
}
메시지
// Send a message
{
"operation": "messages",
"operation": "send",
"phoneNumber": "+1234567890",
"message": "Hello, how are you?"
}
// Read messages from a contact
{
"operation": "messages",
"operation": "read",
"phoneNumber": "+1234567890",
"limit": 5
}
// Schedule a message
{
"operation": "messages",
"operation": "schedule",
"phoneNumber": "+1234567890",
"message": "Don't forget our meeting tomorrow!",
"scheduledTime": "2023-12-01T09:00:00Z"
}
// Check unread messages
{
"operation": "messages",
"operation": "unread"
}
우편
// Check unread emails
{
"operation": "mail",
"operation": "unread",
"limit": 10
}
// Search emails
{
"operation": "mail",
"operation": "search",
"searchTerm": "invoice",
"limit": 5
}
// Send an email
{
"operation": "mail",
"operation": "send",
"to": "recipient@example.com",
"subject": "Meeting Agenda",
"body": "Here's the agenda for our meeting tomorrow...",
"cc": "colleague@example.com"
}
// List mailboxes
{
"operation": "mail",
"operation": "mailboxes"
}
// List accounts
{
"operation": "mail",
"operation": "accounts"
}
알림
// List all reminders
{
"operation": "reminders",
"operation": "list"
}
// Search for reminders
{
"operation": "reminders",
"operation": "search",
"searchText": "groceries"
}
// Create a reminder
{
"operation": "reminders",
"operation": "create",
"name": "Buy milk",
"listName": "Shopping",
"notes": "Get organic milk",
"dueDate": "2023-12-01T18:00:00Z"
}
// Open a reminder
{
"operation": "reminders",
"operation": "open",
"searchText": "Buy milk"
}
// List reminders by list ID
{
"operation": "reminders",
"operation": "listById",
"listId": "x-apple-reminder://list/123456"
}
달력
// Search for events
{
"operation": "calendar",
"operation": "search",
"searchText": "meeting",
"fromDate": "2023-12-01T00:00:00Z",
"toDate": "2023-12-31T23:59:59Z"
}
// List upcoming events
{
"operation": "calendar",
"operation": "list",
"limit": 5
}
// Create an event
{
"operation": "calendar",
"operation": "create",
"title": "Team Meeting",
"startDate": "2023-12-05T14:00:00Z",
"endDate": "2023-12-05T15:00:00Z",
"location": "Conference Room A",
"notes": "Quarterly review meeting",
"isAllDay": false,
"calendarName": "Work"
}
// Open an event
{
"operation": "calendar",
"operation": "open",
"eventId": "x-apple-calendar://event/123456"
}
지도
// Search for locations
{
"operation": "maps",
"operation": "search",
"query": "coffee shops near me",
"limit": 5
}
// Save a location
{
"operation": "maps",
"operation": "save",
"name": "Favorite Coffee Shop",
"address": "123 Main St, Anytown, USA"
}
// Get directions
{
"operation": "maps",
"operation": "directions",
"fromAddress": "123 Main St, Anytown, USA",
"toAddress": "456 Oak Ave, Anytown, USA",
"transportType": "driving"
}
// Drop a pin
{
"operation": "maps",
"operation": "pin",
"name": "Meeting Point",
"address": "Central Park, New York, NY"
}
// List guides
{
"operation": "maps",
"operation": "listGuides"
}
// Create a guide
{
"operation": "maps",
"operation": "createGuide",
"guideName": "Favorite Restaurants"
}
// Add to guide
{
"operation": "maps",
"operation": "addToGuide",
"guideName": "Favorite Restaurants",
"address": "789 Pine St, Anytown, USA"
}
// Get map center coordinates
{
"operation": "maps",
"operation": "getCenter"
}
// Set map center coordinates
{
"operation": "maps",
"operation": "setCenter",
"latitude": 37.7749,
"longitude": -122.4194
}
웹 검색
// Search the web
{
"operation": "webSearch",
"query": "how to make chocolate chip cookies"
}
건축학
Apple MCP 도구는 모듈식 아키텍처로 구축되었습니다.
- index.ts : MCP 서버를 설정하고 도구를 등록하는 주요 진입점
- tools.ts : 도구 스키마와 설명을 정의합니다.
- src/handlers/ : 각 도구에 대한 핸들러 함수가 포함되어 있습니다.
- src/scripts/ : Apple 애플리케이션과 상호 작용하기 위한 AppleScript 스크립트가 포함되어 있습니다.
- utils/ : 각 Apple 서비스에 대한 유틸리티 모듈을 포함합니다.
이 도구는 지연 로딩을 사용하여 필요할 때만 모듈을 로딩하여 성능을 향상시킵니다.
보안 및 권한
이 도구는 다양한 Apple 애플리케이션 및 서비스에 대한 접근 권한을 필요로 합니다. macOS에서 요청하면 권한을 부여해야 합니다. 이러한 권한은 시스템 환경설정 > 보안 및 개인 정보 보호 > 개인 정보 보호에서 관리할 수 있습니다.
개발
설정
# Clone the repository
git clone https://github.com/yourusername/apple-mcp.git
cd apple-mcp
# Install dependencies
bun install
개발 모드에서 실행
코드 스타일
- 2칸 들여쓰기를 사용하세요
- 줄을 100자 이하로 유지하세요
- 함수 매개변수와 반환에 대해 명시적 유형 주석을 사용하세요.
- 유형, 인터페이스 및 도구 상수에 대해 PascalCase를 따르세요.
- 변수와 함수에는 camelCase를 사용하세요
기여하다
기여를 환영합니다! 풀 리퀘스트를 제출해 주세요.
- 저장소를 포크하세요
- 기능 브랜치를 생성합니다(
git checkout -b feature/amazing-feature
) - 변경 사항을 커밋하세요(
git commit -m 'Add some amazing feature'
) - 브랜치에 푸시(
git push origin feature/amazing-feature
) - 풀 리퀘스트 열기