Apple Icloud MCP vs Karea MCP
A side-by-side look at the Apple Icloud MCP and Karea MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Apple Icloud MCP for workplace & productivity work as a local process; choose Karea MCP for workplace & productivity as a local process. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
Choose Apple Icloud MCP when
- You need dedicated capabilities in the Workplace & Productivity domain.
- You prefer a local stdio subprocess transport.
- You have the keys it needs:
ICLOUD_USERNAME, ICLOUD_APP_PASSWORD, ICLOUD_MAIL_ADDRESS, DISPLAY_TZ, APPLE_WRITE_MODE. - You want tools like
apple_healthcheck, apple_music_search_catalog, apple_music_get_catalog_items.
Choose Karea MCP when
- You need dedicated capabilities in the Workplace & Productivity domain.
- You prefer a local stdio subprocess transport.
- Its auth model fits you: API key required.
- You have the keys it needs:
KAREA_API_KEY. - You want tools like
karea_projects, karea_tasks, karea_subtasks.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Workplace & Productivity | Workplace & Productivity |
| Quality signal | 61/100 · Good | 64/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | API key required |
| Pricing | BYOK (pay the provider) | BYOK (pay the provider) |
| Required env vars | ICLOUD_USERNAMEICLOUD_APP_PASSWORDICLOUD_MAIL_ADDRESSDISPLAY_TZAPPLE_WRITE_MODE | KAREA_API_KEY |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 1 |
| Directory activity | 3 views 0 installs 0 upvotes | 5 views 0 installs 0 upvotes |
| Tools | 37 | 12 |
| Full listing | View Apple Icloud MCP | View Karea MCP |
Tools & capabilities
Apple Icloud MCP tools 37
apple_healthcheckCheck which Apple services (Apple Music, iCloud Calendar, Contacts, Mail, Apple Maps, WeatherKit, iTunes) are configured and reachable. For each: whether credentials are set (and which variables to set if not), and whether Apple accepted them on a cheap read-only request. Also reports the write mode and display time zone. Run this first when a tool fails or to see what this server can do.apple_music_search_catalogSearch Apple Music's catalog by text for songs, albums, artists, playlists, music videos or stations. Results are grouped by type, each group with its own returned/hasMore/nextOffset, and carry catalog ids other tools take (e.g. to add songs to a playlist). Up to 25 per type per call. Needs an Apple Developer key (APPLE_TEAM_ID, APPLE_KEY_ID, APPLE_PRIVATE_KEY) or web-player mode (APPLE_MUSIC_WEB_USER_TOKEN).apple_music_get_catalog_itemsLook up Apple Music catalog songs, albums, artists, playlists, music videos or stations by id — or songs/music videos by ISRC, albums by UPC. A single album or playlist also returns its track list (paged); a single artist can include views such as top-songs or latest-release. Reports ids Apple did not return. Needs an Apple Developer key or web-player mode.apple_music_get_chartsGet Apple Music's top charts (most played songs, albums, playlists, music videos) for a storefront, optionally for one genre. Each chart has its own returned/hasMore/nextOffset and ranked items with catalog ids. Needs an Apple Developer key or web-player mode.apple_music_list_playlistsList the playlists in your Apple Music library (alphabetical), or the contents of one playlist folder (folders and playlists). Each has its library id (p.…), name, description, canEdit, isPublic, hasCatalog, dateAdded and lastModifiedDate. Paged. Needs APPLE_MUSIC_USER_TOKEN with an Apple Developer key, or web-player mode (APPLE_MUSIC_WEB_USER_TOKEN).apple_music_get_playlistRead one playlist — a library playlist (p.…) or a catalog playlist (pl.…) — with its tracks in order. Each track has its 1-based position, library id, catalogId, name, artist, album and duration. Paged (up to 300 per call), or allTracks for the whole list (up to 5000); a complete read returns a revision (for reorder/remove tracks' expectedRevision). Library playlists need APPLE_MUSIC_USER_TOKEN or web-player mode.apple_music_list_foldersList the playlist folders in your Apple Music library: the top level, or the sub-folders of one folder. Each has its folder id (p.…, for apple_music_list_playlists folderId, apple_music_create_folder parentFolderId and apple_music_move_playlist), name and dateAdded, plus how many playlists sit directly in the folder. Needs APPLE_MUSIC_USER_TOKEN or web-player mode.apple_music_search_librarySearch YOUR Apple Music library (not the whole catalog) by text for songs, albums, artists, playlists or music videos. Results are grouped by type with library ids (i.… songs, l.… albums, p.… playlists) and each group's returned/hasMore/nextOffset. Up to 25 per type. Needs APPLE_MUSIC_USER_TOKEN or web-player mode.apple_music_list_libraryList what is in your Apple Music library: all songs, albums, artists or music videos (alphabetical, paged), or recently-added items. Items carry library ids and, for songs, the catalogId. Needs APPLE_MUSIC_USER_TOKEN or web-player mode.apple_music_get_historyYour recent Apple Music listening: recently-played (albums, playlists, stations), recently-played-tracks (songs), recent-stations, or heavy-rotation. Apple gives no play timestamps or counts here and pages recently-played 10 at a time and tracks 30 at a time (this tool pages for you; only about the last 50 items are reachable). Needs APPLE_MUSIC_USER_TOKEN or web-player mode.apple_music_get_recommendationsYour personal Apple Music recommendations ("Made for You", "Recently Played" and similar groups), each with its title and the albums, playlists or stations in it (catalog ids). Needs APPLE_MUSIC_USER_TOKEN or web-player mode.apple_music_get_replayApple Music Replay: your top songs, albums and artists for the latest Replay year, or for a given year (with play counts where Apple provides them). Needs APPLE_MUSIC_USER_TOKEN or web-player mode; a specific year uses an undocumented Apple endpoint that works most reliably in web-player mode.- +25 more on the listing page
Karea MCP tools 12
karea_projectsProjects and their categories: list, create, delete, share, and manage the categories inside a project. Pass one of these as `action`, with its arguments in `params`: - karea_list_projects - List all Karea projects with their IDs [no parameters] - karea_create_project - Create a new Karea project owned by you and seed it with the default categories (Coding, Testing, Documenting, Reviewing). [required: name] - karea_delete_project - Permanently delete a project and everything inside it (tasks, categories, notes, history). [required: name; optional: confirm] - karea_share_project - Give another user access to a project by email at a chosen role (owner, editor, commenter or viewer). [required: project, email; optional: role] - karea_create_category - Create a new category (a task bucket) inside an existing project and return it. [required: name; optional: projectId] - karea_delete_category - Permanently delete a category AND every task inside it, including history. [required: name; optional: projectId] For the full parameter schema of any action, call karea_help with that action name.karea_tasksTasks: find them, read them, create them, change them, close them. The main entry point - start here. Pass one of these as `action`, with its arguments in `params`: - karea_list_tasks - List tasks in a project. [optional: projectId, status, closedSince, limit, category, priority, assignee, search] - karea_view_task - Return one task with all its details (status, priority, deadline, recurrence, category, description, notes, requisites, links), located by visual ID, name or UUID. [required: task; optional: projectId, includeContext] - karea_view_tasks - Return details for MANY tasks in one response. [required: tasks; optional: projectId, includeContext, includeMarkdown] - karea_create_task - Create a new task in a project and return it with its visual ID (e.g. [required: name; optional: category, priority, sla, description, markdown, source, closingRequisites, tags, parentId, jiraIssueKey, projectId, aiSessionId, toolType, sessionLabel] - karea_edit_task - Update fields of an existing task (title, status, priority, deadline, category, assignee, description, tags, or add a note) located by visual ID, name or UUID. [required: task; optional: name, priority, status, reviewStage, sla, description, markdown, category, note, tags, clearTags, closingRequisites, clearClosingRequisites, jiraIssueKey, linkTasks, linkType, unlinkTasks, projectId, aiSessionId, toolType, sessionLabel] - karea_edit_tasks - Apply the SAME change to many tasks in ONE request - status, priority, category, deadline, assignee, or a note. [required: tasks; optional: projectId, status, priority, category, sla, note] - karea_close_task - Mark a task as done: sets status to done and stamps the close time. [required: task; optional: resolution, projectId, aiSessionId, toolType, sessionLabel] - karea_delete_task - Permanently delete a task and its history. [required: task; optional: confirm, projectId] - karea_quick_task - Log something you already finished as a done task (it shows up in Recap) and return it. [required: description; optional: source, projectId, aiSessionId, toolType, sessionLabel] - karea_doing - Create a task you are working on right now (status: in_progress) [required: description; optional: category, priority, sla, projectId, aiSessionId, toolType, sessionLabel] - karea_done - Mark several tasks as done in one call, each given by visual ID or name; returns a per-task result. [required: tasks; optional: projectId] For the full parameter schema of any action, call karea_help with that action name.karea_subtasksSubtasks and closing requisites - the checklist a task has to satisfy before it can be closed. Pass one of these as `action`, with its arguments in `params`: - karea_create_subtask - Create a subtask under a parent task. [required: parent, title; optional: category, priority, sla, description, markdown, source, closingRequisites, tags, jiraIssueKey, projectId, aiSessionId, toolType, sessionLabel] - karea_list_subtasks - List subtasks of a parent task. [required: parent; optional: projectId] - karea_add_requisite - Add a closing requisite (a checklist item that must be completed before the task may be closed) to a task, and return it. [required: task, description; optional: projectId] - karea_toggle_requisite - Mark a closing requisite complete or incomplete, by ID. [required: task, requisiteId, completed; optional: projectId] - karea_delete_requisite - Permanently delete a closing requisite from a task, by ID. [required: task, requisiteId; optional: projectId] For the full parameter schema of any action, call karea_help with that action name.karea_notesNotes on a task - human-readable updates the user reads - plus the sticky-note scratch board. For private cross-session memory use karea_docs (set_context). Pass one of these as `action`, with its arguments in `params`: - karea_list_notes - List the notes (human-readable updates) on a task, newest first. [required: task; optional: projectId] - karea_add_note - Add a note to a task - or the same note to many tasks at once, via `tasks`. [required: content; optional: task, tasks, projectId, aiSessionId, toolType, sessionLabel] - karea_edit_note - Change the text of an existing note on a task, by note ID, and return the updated note. [required: task, noteId, content; optional: projectId, aiSessionId, toolType, sessionLabel] - karea_delete_note - Permanently delete a note from a task, by note ID. [required: task, noteId; optional: projectId] - karea_list_sticky_notes - List the user's sticky notes - the scratch pad: short reminders, commands, URLs. [optional: projectId] - karea_create_sticky_note - Pin a short note to the user's sticky board - a command, a URL, a couple of lines to remember. [required: content; optional: title, color, projectId, pinned] - karea_edit_sticky_note - Change a sticky note: its text, title, colour, pin state, or which project it belongs to. [required: noteId; optional: content, title, color, projectId, pinned] - karea_delete_sticky_note - Delete a sticky note. [required: noteId] For the full parameter schema of any action, call karea_help with that action name.karea_docsA task's long-form markdown document and its AI Context (private working memory that survives across sessions). Pass one of these as `action`, with its arguments in `params`: - karea_get_markdown - Read the markdown document attached to a task. [required: task; optional: projectId] - karea_set_markdown - Write the markdown document for a task. [required: task, markdown; optional: projectId, aiSessionId, toolType, sessionLabel] - karea_get_context - Read the task's Context - titled entries of AI working memory that hold the FULL HISTORY of a task (not just its current state): what was tried, decided, discovered, and abandoned along the way. [required: task; optional: projectId] - karea_set_context - Write a titled entry of the task's Context - the AI-facing cross-session working memory. [required: task, context; optional: title, projectId, aiSessionId, toolType, sessionLabel] For the full parameter schema of any action, call karea_help with that action name.karea_questionsOpen questions: things you are waiting on an answer for. Create, answer, edit, delete. Pass one of these as `action`, with its arguments in `params`: - karea_list_questions - List open questions (unresolved decisions or blockers) in a project, newest first. [optional: projectId, status] - karea_create_question - Create an open question (a decision or blocker to resolve) in a project, optionally linked to tasks, and return it with its short ID (e.g. [required: question; optional: projectId, markdown, taskIds] - karea_answer_question - Answer an open question, located by short ID or text match: sets its answer and flips its status to answered. [required: questionId, answer] - karea_edit_question - Edit an open question: change its text, status (open, answered or cancelled), answer, or linked tasks. [required: questionId; optional: question, answer, status, markdown, taskIdsAdd, taskIdsRemove] - karea_delete_question - Permanently delete an open question. [required: questionId] For the full parameter schema of any action, call karea_help with that action name.karea_resourcesThe file/document library: list, read, create, update, upload, delete, and attach resources to tasks. Pass one of these as `action`, with its arguments in `params`: - karea_list_resources - List resources (text notes & files). [optional: projectId, query, folder, type, mime, minSize, maxSize] - karea_get_resource - Return a resource with its full content and metadata, by ID. [required: resourceId] - karea_create_resource - Create a text resource (a note or document) in a project or folder and return it with its ID. [required: name, content; optional: projectId, folder] - karea_update_resource - Overwrite a text resource content and/or metadata, by ID, and return the updated resource. [required: resourceId; optional: name, content, folder] - karea_upload_resource - Upload a binary file as a resource (base64-encoded) [required: name, data; optional: mimeType, folder, taskId] - karea_delete_resource - Permanently delete a resource (text or file) by ID. [required: resourceId] - karea_link_resource_to_task - Link an existing resource (text or file) to a task. [required: resourceId, task; optional: projectId] - karea_unlink_resource_from_task - Remove the link between a resource and a task. [required: resourceId, task; optional: projectId] For the full parameter schema of any action, call karea_help with that action name.karea_meetingsMeetings, and the tasks and open questions attached to them. Pass one of these as `action`, with its arguments in `params`: - karea_list_meetings - List meetings. [optional: scope, from, to, projectId] - karea_view_meeting - Return one meeting in full: time, location, project, attendees, prep notes, transcript, linked tasks and linked open questions. [required: meetingId] - karea_create_meeting - Create a meeting. [required: title, startAt, endAt; optional: description, location, projectId, notes, attendees] - karea_edit_meeting - Update a meeting. [required: meetingId; optional: title, startAt, endAt, description, location, projectId, notes, transcript] - karea_delete_meeting - Delete a meeting permanently. [required: meetingId, confirm] - karea_link_task_to_meeting - Link an EXISTING task to a meeting (discussed at / arising from it). [required: meetingId, task; optional: projectId] - karea_unlink_task_from_meeting - Remove the link between a task and a meeting. [required: meetingId, task; optional: projectId] - karea_link_question_to_meeting - Link an EXISTING open question to a meeting, so it is raised there. [required: meetingId, questionId] - karea_unlink_question_from_meeting - Remove the link between an open question and a meeting. [required: meetingId, questionId] For the full parameter schema of any action, call karea_help with that action name.karea_remindersReminders: see what is due, create one, snooze it, dismiss it, mark it done. Pass one of these as `action`, with its arguments in `params`: - karea_check_reminders - Return the caller's upcoming and past-due reminders. [optional: taskId, includeDone] - karea_create_reminder - Schedule a reminder on a task. [required: task, fireAt; optional: title, emailOptIn] - karea_snooze_reminder - Snooze a firing reminder by N minutes. [required: reminderId, minutes] - karea_dismiss_reminder - Dismiss a reminder - cancels it so it will not fire again. [required: reminderId] - karea_mark_reminder_done - Fulfill a reminder: closes both the reminder AND the underlying task (status = done). [required: reminderId] For the full parameter schema of any action, call karea_help with that action name.karea_integrationsJIRA links on a task, and AI CLI sessions linked to a task. Pass one of these as `action`, with its arguments in `params`: - karea_get_jira_link - Return the linked JIRA issue (key and URL) for a task, if one exists. [required: task; optional: projectId] - karea_link_jira - Link a Karea task to a JIRA issue by issue key (e.g. [required: task, issueKey; optional: projectId] - karea_unlink_jira - Remove the JIRA link from a Karea task [required: task; optional: projectId] - karea_link_session - Link your current AI coding session (Claude Code, OpenCode, Codex, Cursor, Aider) to a Karea task so the user can see the session history for that task and copy a command to resume the session later. [required: task, provider, sessionId; optional: label, projectId] - karea_list_sessions - List AI coding sessions linked to a task (provider, sessionId, label, last active, resume command). [required: task; optional: projectId] - karea_unlink_session - Remove a previously-linked AI session from a task. [required: task, sessionRowId; optional: projectId] For the full parameter schema of any action, call karea_help with that action name.karea_assistantAsk Karea a natural-language question about your work, or generate a recap of a period. Pass one of these as `action`, with its arguments in `params`: - karea_ask - Send a natural-language request to the Karea AI assistant, which may read or modify your tasks to carry it out, and return its reply. [required: message; optional: projectId] - karea_recap - Return a summary of recent activity (tasks created, closed and updated) over a recent time window. [optional: hours, projectId] For the full parameter schema of any action, call karea_help with that action name.karea_helpReturn the full JSON Schema and description of any Karea action, so you can call it correctly through its group tool. Read-only; changes nothing. Omit `action` to list every available action grouped by tool.
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
Apple Icloud MCP
{
"mcpServers": {
"apple-icloud-mcp": {
"command": "npx",
"args": [
"-y",
"apple-icloud-mcp"
],
"env": {
"ICLOUD_USERNAME": "YOUR_ICLOUD_USERNAME_HERE",
"ICLOUD_APP_PASSWORD": "YOUR_ICLOUD_APP_PASSWORD_HERE",
"ICLOUD_MAIL_ADDRESS": "YOUR_ICLOUD_MAIL_ADDRESS_HERE",
"DISPLAY_TZ": "YOUR_DISPLAY_TZ_HERE",
"APPLE_WRITE_MODE": "YOUR_APPLE_WRITE_MODE_HERE"
}
}
}
}
Karea MCP
{
"mcpServers": {
"starecz-karea-mcp": {
"command": "npx",
"args": [
"-y",
"karea-mcp"
],
"env": {
"KAREA_API_KEY": "YOUR_KAREA_API_KEY_HERE"
}
}
}
}
Frequently asked questions
Apple Icloud MCP is categorized under Workplace & Productivity and uses a local stdio subprocess. Karea MCP belongs to Workplace & Productivity and uses a local stdio subprocess. Pick Apple Icloud MCP for workplace & productivity work and Karea MCP for workplace & productivity.
Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.
Apple Icloud MCP is bring-your-own-key: usage is billed by the API provider you supply a key for. Karea MCP is bring-your-own-key: usage is billed by the API provider you supply a key for. Auth: api key required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.
Yes. MCP clients support multiple servers: add apple-icloud-mcp and starecz-karea-mcp as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, Apple Icloud MCP has a quality signal of 61/100 (Good) with 3 views, 0 installs and 0 GitHub stars. Karea MCP has 64/100 (Good) with 5 views, 0 installs and 1 GitHub stars.