Pear MCP iCloud Calendar, Reminders & Contacts
by @ashtonau
iCloud Calendar, Reminders & Contacts via Pear. Manage events, reminders, contacts, daily briefings, and AI scheduling. 27 tools for Apple iCloud via CalDAV/...
clawhub install pear-icloudπ About This Skill
name: Pear - iCloud Calendar, Reminders & Contacts description: iCloud Calendar, Reminders & Contacts via Pear. Manage events, reminders, contacts, daily briefings, and AI scheduling. 27 tools for Apple iCloud via CalDAV/CardDAV. homepage: https://pearmcp.com metadata: openclaw: emoji: "π" primaryEnv: PEAR_API_KEY requires: env: - PEAR_API_KEY network: - pearmcp.com
Pear β iCloud Integration
Pear provides read/write access to iCloud Calendar, Reminders, and Contacts through 27 MCP tools. All tools are prefixed with pear_ and communicate with iCloud via CalDAV/CardDAV protocols.
When to Use
Activate this skill when the user wants to:
Activation triggers:
Do NOT activate for:
Prerequisites
Required Environment Variable:
PEAR_API_KEY β Your Pear API key (format: pear_sk_...)Optional:
PEAR_MCP_URL β Custom endpoint URL (defaults to https://pearmcp.com/api/mcp)Tool Reference
Events (8 tools)
| Tool | Description |
|------|-------------|
| pear_list_calendars | List all iCloud calendars (including read-only subscriptions) |
| pear_list_events | List events in a time range, with pagination and calendar filtering |
| pear_search_events | Search events by title or description within a date range |
| pear_create_event | Create an event with optional recurrence, alarms, attendees, and location |
| pear_update_event | Update an existing event's properties |
| pear_delete_event | Delete an event by filename |
| pear_find_free_slots | Find available time slots of a given duration |
| pear_check_availability | Check if a specific time slot is free, returns conflicts |
Reminders (4 tools)
| Tool | Description |
|------|-------------|
| pear_list_reminders | List reminders with optional list filtering, includes completed toggle |
| pear_create_reminder | Create a reminder with optional due date, priority (1=high, 5=med, 9=low), and notes |
| pear_update_reminder | Update a reminder's properties |
| pear_complete_reminder | Mark a reminder as completed |
Contacts (9 tools)
| Tool | Description |
|------|-------------|
| pear_list_contacts | List all contacts with full vCard data (phones, emails, addresses, birthdays) |
| pear_search_contacts | Search by name, email, phone, or organization |
| pear_create_contact | Create a contact with full vCard support including photo |
| pear_update_contact | Update contact fields (merges with existing data) |
| pear_delete_contact | Delete a contact |
| pear_list_contact_groups | List all contact groups with member counts |
| pear_create_contact_group | Create a new contact group |
| pear_add_contact_to_group | Add a contact to a group by name or email |
| pear_update_contact_photo | Update a contact's photo (Base64, data URI, or external URL) |
Briefing (1 tool)
| Tool | Description |
|------|-------------|
| pear_get_daily_briefing | Get today's events and pending reminders in one call. Enriches attendees with contact data. |
Scheduling (1 tool)
| Tool | Description |
|------|-------------|
| pear_find_best_time | AI-scored optimal meeting slots. Considers work hours, time-of-day preference, day-of-week preference, buffer time, and reminder deadlines. |
Batch Operations (4 tools)
| Tool | Description |
|------|-------------|
| pear_create_events_batch | Create up to 50 events in one call |
| pear_create_reminders_batch | Create up to 50 reminders in one call |
| pear_create_contacts_batch | Create up to 50 contacts in one call |
| pear_delete_contacts_batch | Delete up to 50 contacts in one call |
Workflow Guidelines
Dates and Times
2025-06-15T14:30:00Z or 2025-06-15T14:30:00+10:00timezone (IANA format like America/New_York or Australia/Sydney) for user-friendly display timesisAllDay: true and use date-only format 2025-06-15pear_list_events requires a timeRange object: { start: "...", end: "..." }Creating Events
When creating events, follow this pattern:
1. If the user doesn't specify a calendar, omit calendarName β Pear auto-selects the default
2. For recurring events, use the recurrence object: { frequency: "WEEKLY", interval: 1, count: 10 }
3. For attendees, you can pass names β Pear resolves them against the user's contacts automatically
4. Use idempotencyKey when retrying to prevent duplicate events
5. Alarms use minutes before: { action: "display", trigger: 15 } for a 15-minute reminder
Finding Meeting Times
For scheduling, prefer pear_find_best_time over pear_find_free_slots:
pear_find_best_time returns AI-scored slots considering work hours, preferences, and existing commitmentspreferences to customize: { timeOfDay: "morning", focusTime: true, workHoursStart: 9, workHoursEnd: 17 }pear_find_free_slots is simpler β just returns raw available slots without scoringReminders
1 = high, 5 = medium, 9 = low, 0 = noneincludeCompleted: false (default)listNameContacts
pear_update_contact merges fields β it won't erase data you don't include in the updateYYYY-MM-DD for full date, --MM-DD for year-unknownVirtual Birthdays
Pear generates all-day birthday events from contact birthday fields. These appear as events on a "Birthdays" calendar when listing events. This is a synthesized feature β Apple's native Birthdays calendar is not exposed via CalDAV.
Daily Briefing
pear_get_daily_briefing is the most efficient way to give the user an overview:
timezone for correct day boundariesdate to get a briefing for a different daySafety & Confirmation
Actions Requiring Care
| Action | Risk | Guidance |
|--------|------|----------|
| pear_delete_event | Removes event permanently | Confirm event title and date with user before deleting |
| pear_delete_contact | Removes contact permanently | Always confirm β show contact name first |
| pear_delete_contacts_batch | Bulk delete up to 50 contacts | Require explicit user confirmation with count |
| pear_update_event | Overwrites event fields | Summarize changes before applying |
| pear_complete_reminder | Marks as done | Safe β can be undone by updating completed: false |
| Batch create operations | Creates up to 50 items | Confirm count and summarize before executing |
Data Safety
pear_update_contact preserves fields you don't mentionPEAR_API_KEY β treat it as a secretError Handling
| Error Code | Meaning | What to Do |
|------------|---------|------------|
| -32001 | Missing or invalid API key | Check PEAR_API_KEY is set correctly |
| -32602 | Invalid parameters | Check parameter names and types against tool reference |
| -32603 | Server error | Retry once, then report to user |
| 404 on event/reminder | Item not found | The filename may have changed β re-list to get current filenames |
| Calendar is read-only | Cannot modify subscription calendars | List calendars first to check which are writable |
Common Patterns
Error Recovery (Idempotency)
Event creation failed mid-request or timed out:
β Retry pear_create_event with the same idempotencyKey
β Pear deduplicates β no double-booking even if the first request succeeded silently
Morning Briefing
User: "What's on my plate today?"
β Call pear_get_daily_briefing with timezone
β Summarize events chronologically, then pending reminders
Schedule a Meeting
User: "Find time for a 1-hour meeting this week"
β Call pear_find_best_time with durationMinutes: 60 and this week's range
β Present top 3 options with scores
β On user selection, call pear_create_event
Quick Reminder
User: "Remind me to call the dentist tomorrow"
β Call pear_create_reminder with title and dueDate set to tomorrow
Contact Lookup
User: "What's Sarah's phone number?"
β Call pear_search_contacts with query: "Sarah"
β Return matching contacts with phone numbers
Bulk Event Creation
User: "Add these 5 meetings to my calendar"
β Call pear_create_events_batch with all events in one request
β Summarize results (created count, any failures)
References
β‘ When to Use
βοΈ Configuration
Required Environment Variable:
PEAR_API_KEY β Your Pear API key (format: pear_sk_...)Optional:
PEAR_MCP_URL β Custom endpoint URL (defaults to https://pearmcp.com/api/mcp)