Pear - iCloud Calendar, Reminders, Contacts & Mail
iCloud Calendar, Reminders, Contacts, and Mail via Pear. Manage events, reminders, contacts, inbox workflows, scheduling, and batch actions. 34 tools for Apple iCloud via CalDAV/CardDAV/IMAP/SMTP.
git clone https://github.com/AshtonAU/pear-plugin
T=$(mktemp -d) && git clone --depth=1 https://github.com/AshtonAU/pear-plugin "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/pear-icloud" ~/.claude/skills/ashtonau-pear-plugin-pear-icloud-calendar-reminders-contacts-mail && rm -rf "$T"
skills/pear-icloud/SKILL.mdPear — iCloud Integration
Pear provides read/write access to iCloud Calendar, Reminders, Contacts, and Mail through 34 MCP tools. All tools are prefixed with
pear_ and communicate with iCloud via CalDAV/CardDAV for Calendar, Reminders, and Contacts, plus IMAP/SMTP for Mail.
When to Use
Activate this skill when the user wants to:
- Check their schedule, upcoming events, or daily agenda
- Create, update, or delete calendar events
- Manage reminders or to-do lists
- Look up, create, or update contacts
- Read, send, or organize iCloud Mail
- Find free time slots or schedule meetings
- Build a daily briefing from events, reminders, and unread email
- Check availability for a specific time
- Work with contact groups
- Perform bulk operations on events, reminders, or contacts
Activation triggers:
- "What's on my calendar", "my schedule", "upcoming events"
- "Remind me to", "add a reminder", "my tasks", "to-do"
- "Find contact", "add a contact", "phone number for"
- "Unread email", "inbox", "send an email", "reply to this email"
- "Schedule a meeting", "find a time", "when am I free"
- "Daily briefing", "what's today look like"
- "Birthday", "anniversaries"
Do NOT activate for:
- Apple Notes (not supported — CalDAV only)
- iMessage
- iCloud Drive or file storage
- Apple Music, Photos, or other non-PIM services
- Local macOS Calendar.app scripting (Pear works cross-platform via API)
Prerequisites
Required Environment Variable:
— Your Pear API key (format:PEAR_API_KEY
)pear_sk_...- Sign up at pearmcp.com
- Generate an API key from the dashboard
- Connect your iCloud account (requires an app-specific password)
Optional:
— Custom endpoint URL (defaults toPEAR_MCP_URL
)https://pearmcp.com/api/mcp
Tool Reference
Events (8 tools)
| Tool | Description |
|---|---|
| List all iCloud calendars (including read-only subscriptions) |
| List events in a time range, with pagination and calendar filtering |
| Search events by title or description within a date range |
| Create an event with optional recurrence, alarms, attendees, and location |
| Update an existing event's properties |
| Delete an event by filename |
| Find available time slots of a given duration |
| Check if a specific time slot is free, returns conflicts |
Reminders (5 tools)
| Tool | Description |
|---|---|
| List reminders with optional list filtering, includes completed toggle |
| Create a reminder with optional due date, priority (1=high, 5=med, 9=low), and notes |
| Update a reminder's properties |
| Mark a reminder as completed |
| Delete a reminder |
Contacts (9 tools)
| Tool | Description |
|---|---|
| List all contacts with full vCard data (phones, emails, addresses, birthdays) |
| Search by name, email, phone, or organization |
| Create a contact with full vCard support including photo |
| Update contact fields (merges with existing data) |
| Delete a contact |
| List all contact groups with member counts |
| Create a new contact group |
| Add a contact to a group by name or email |
| Update a contact's photo (inline base64 or URI) |
Scheduling (1 tool)
| Tool | Description |
|---|---|
| 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 |
|---|---|
| Create up to 50 events in one call |
| Create up to 50 reminders in one call |
| Create up to 50 contacts in one call |
| Delete up to 50 contacts in one call |
Mail (7 tools)
| Tool | Description |
|---|---|
| List mail folders and mailboxes available in iCloud Mail |
| List emails from a folder, with unread and query filters |
| Read the full content of an email |
| Send an email through iCloud Mail |
| Move an email between folders |
| Mark an email as read or unread |
| Delete an email by moving it to Trash |
Workflow Guidelines
Dates and Times
- Always use ISO 8601 format:
or2025-06-15T14:30:00Z2025-06-15T14:30:00+10:00 - Timezone parameter: Pass
(IANA format liketimezone
orAmerica/New_York
) for user-friendly display timesAustralia/Sydney - All-day events: Set
and use date-only formatisAllDay: true2025-06-15 - Date ranges:
requires apear_list_events
object:timeRange{ start: "...", end: "..." }
Creating Events
When creating events, follow this pattern:
- If the user doesn't specify a calendar, omit
— Pear auto-selects the defaultcalendarName - For recurring events, use the
object:recurrence{ frequency: "WEEKLY", interval: 1, count: 10 } - For attendees, you can pass names — Pear resolves them against the user's contacts automatically
- Use
when retrying to prevent duplicate eventsidempotencyKey - Alarms use minutes before:
for a 15-minute reminder{ action: "display", trigger: 15 }
Finding Meeting Times
For scheduling, prefer
pear_find_best_time over pear_find_free_slots:
returns AI-scored slots considering work hours, preferences, and existing commitmentspear_find_best_time- Pass
to customize:preferences{ timeOfDay: "morning", focusTime: true, workHoursStart: 9, workHoursEnd: 17 }
is simpler — just returns raw available slots without scoringpear_find_free_slots
Reminders
- Reminders are accessed via CalDAV (VTODO protocol) — basic operations work well (title, due date, priority, notes, completion). Modern Apple Reminders features like subtasks, tags, smart lists, and location-based reminders are not available via CalDAV.
- Priority values:
= high,1
= medium,5
= low,9
= none0 - To list only incomplete reminders, use
(default)includeCompleted: false - Reminder lists are auto-created if they don't exist when using
listName
- Mail works through iCloud IMAP/SMTP, not through CalDAV/CardDAV
- For Mail to work reliably, the user should onboard Pear with their real
address or an iCloud Mail custom-domain address tied to the mailbox@icloud.com
is best for inbox scans; usepear_list_emails
andquery
to keep results tightunreadOnly
gives full body content after you identify the message withpear_read_emailpear_list_emails
supportspear_send_email
,to
,cc
, reply headers, and HTML/plain-text bodiesbcc
Contacts
merges fields — it won't erase data you don't include in the updatepear_update_contact- Birthday format:
for full date,YYYY-MM-DD
for year-unknown--MM-DD - Phone/email can be a single string or an array for multiple entries
- Contact photos accept inline base64 or
URIsdata:image/... - Remote photo URLs are rejected for security reasons
Virtual 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 does not currently expose a single dedicated briefing tool in the hosted MCP surface. Build daily briefings by combining:
for the chosen daypear_list_events
for incomplete taskspear_list_reminders
for unread inbox context when Mail matterspear_list_emails
The
/pear:briefing command in this plugin already follows that pattern.
Safety & Confirmation
Actions Requiring Care
| Action | Risk | Guidance |
|---|---|---|
| Removes event permanently | Confirm event title and date with user before deleting |
| Removes contact permanently | Always confirm — show contact name first |
| Bulk delete up to 50 contacts | Require explicit user confirmation with count |
| Overwrites event fields | Summarize changes before applying |
| Marks as done | Safe — can be undone by updating |
| Batch create operations | Creates up to 50 items | Confirm count and summarize before executing |
Data Safety
- Read operations are always safe — listing, searching, and briefings have no side effects
- Updates merge, not replace —
preserves fields you don't mentionpear_update_contact - Batch operations are rate-limited — chunks of 5 with 200ms delays, no need to throttle manually
- Never expose the user's
— treat it as a secretPEAR_API_KEY
Error Handling
| Error Code | Meaning | What to Do |
|---|---|---|
| Missing or invalid API key | Check is set correctly |
| Invalid parameters | Check parameter names and types against tool reference |
| Server error | Retry once, then report to user |
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_list_events for today with timezone → Call pear_list_reminders for incomplete tasks → Optionally call pear_list_emails for unread inbox context → Summarize events chronologically, then pending reminders, then important unread mail
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)