apple-icloud-mcp

io.github.chrischall/apple-icloud-mcp

About apple-icloud-mcp

apple-icloud-mcp is an MCP server published by the GitHub account chrischall. Unofficial: Apple Music, iCloud Calendar/Contacts/Mail, Apple Maps and WeatherKit, no Mac needed

It runs on your own machine: your AI client starts it from the npm package apple-icloud-mcp at version 0.3.7.

It asks for 10 secrets: APPLE_PRIVATE_KEY, APPLE_MUSIC_PRIVATE_KEY, APPLE_MAPS_PRIVATE_KEY, APPLE_WEATHERKIT_PRIVATE_KEY, APPLE_MUSIC_DEVELOPER_TOKEN, APPLE_MUSIC_USER_TOKEN, APPLE_MUSIC_WEB_USER_TOKEN, APPLE_MUSIC_WEB_DEVELOPER_TOKEN, ICLOUD_APP_PASSWORD and MCP_CONFIRM_SECRET. Give it a key with the least access that still works.

Version 0.3.7 was published on 20 October 2026, and the source code is public, so you can read it before installing.

Written from the registry entry. 9 automated checks on the registry entry and the package code: 7 pass, 1 warn, 0 fail, 1 info. How we check.

What it asks for

VariableRequiredSecretDescription
APPLE_TEAM_IDNoNoYour Apple Developer Team ID (10 characters). Needed for Apple Music (official API), Apple Maps and WeatherKit.
APPLE_KEY_IDNoNoKey ID of a private key created in Certificates, Identifiers & Profiles → Keys with Media Services (MusicKit), MapKit JS and/or WeatherKit enabled.
APPLE_PRIVATE_KEYNoYesContents of that key's .p8 file (PEM; one-line values with \n escapes and base64 are accepted).
APPLE_PRIVATE_KEY_PATHNoNoLocal installs only: a path to the .p8 file instead of APPLE_PRIVATE_KEY.
APPLE_MUSIC_KEY_IDNoNoOptional per-service override of APPLE_KEY_ID for Apple Music (pair with APPLE_MUSIC_PRIVATE_KEY).
APPLE_MUSIC_PRIVATE_KEYNoYesOptional per-service override of APPLE_PRIVATE_KEY for Apple Music.
APPLE_MAPS_KEY_IDNoNoOptional per-service override of APPLE_KEY_ID for Apple Maps.
APPLE_MAPS_PRIVATE_KEYNoYesOptional per-service override of APPLE_PRIVATE_KEY for Apple Maps.
APPLE_WEATHERKIT_KEY_IDNoNoOptional per-service override of APPLE_KEY_ID for WeatherKit.
APPLE_WEATHERKIT_PRIVATE_KEYNoYesOptional per-service override of APPLE_PRIVATE_KEY for WeatherKit.
APPLE_WEATHERKIT_SERVICE_IDNoNoWeatherKit only: the Services ID registered for WeatherKit (e.g. com.example.weather).
APPLE_MUSIC_DEVELOPER_TOKENNoYesOptional: a pre-minted Apple Music developer token (JWT) instead of signing one from the key above.
APPLE_MUSIC_USER_TOKENNoYesMusic User Token for your library (official API), from a one-time MusicKit sign-in: `npx apple-icloud-mcp music-auth`. Without the Apple Developer key, ask the owner for a developer token (music-auth --print-developer-token) and run it with APPLE_MUSIC_DEVELOPER_TOKEN set. Lasts ~6 months.
APPLE_MUSIC_WEB_USER_TOKENNoYesOpt-in web-player mode (no developer account needed; unlocks rename/delete/remove/reorder): the media-user-token cookie from a signed-in music.apple.com tab.
APPLE_MUSIC_WEB_DEVELOPER_TOKENNoYesOptional override for the web-player developer token (normally read automatically from music.apple.com).
APPLE_MUSIC_STOREFRONTNoNoTwo-letter Apple Music storefront (e.g. us, gb). Default: your account's storefront, else us.
ICLOUD_USERNAMENoNoYour Apple ID email, for iCloud Calendar, Contacts and Mail.
ICLOUD_APP_PASSWORDNoYesAn app-specific password from appleid.apple.com → Sign-In and Security → App-Specific Passwords (NOT your Apple ID password).
ICLOUD_MAIL_ADDRESSNoNoYour @icloud.com address, only if your Apple ID email is not an iCloud address (needed for Mail).
ICLOUD_DEFAULT_CALENDARNoNoCalendar new events go to when none is named (default: the first writable event calendar).
APPLE_WRITE_MODENoNo"none" = read-only tools; "additive" = also create/append, never modify, delete or send; "all" = everything (default). Unrecognized values fail closed to "none".
APPLE_SERVICESNoNoComma-separated services to enable (music, calendar, contacts, mail, maps, weather, itunes). Default: all.
DISPLAY_TZNoNoIANA time zone (e.g. America/New_York) for displayed times and for dates you give without an offset. Set this on a hosted server, which runs in UTC.
APPLE_UNITSNoNo"metric" (default) or "imperial" units for weather (Maps distances always show both).
APPLE_STATE_CACHENoNoSet to false to write nothing under $MCP_DATA_DIR/.apple-icloud-mcp: no web-player token or iCloud discovery cache, and the rejected-password latch and spent confirmation tokens then last only as long as the process.
APPLE_REQUEST_TIMEOUT_MSNoNoPer-request timeout in milliseconds (default 30000).
APPLE_DEBUG_LOGNoNoSet to 1 to log every upstream request line to stderr (credentials redacted).
MCP_CONFIRM_MODENoNoHow confirm-gated writes (send mail, deletes, removing tracks, invitations) behave on a client with no prompt, like claude.ai: "ask-user" (default: preview + confirmToken, the model must get your OK), "auto", or "refuse". Unknown values mean refuse.
MCP_CONFIRM_ELICITATIONNoNo"off" never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE flow. Set it for a client that says it can prompt but never does (the gated call hangs, e.g. opencode 2.0.x). Any other value stays "on" (with a stderr warning).
MCP_CONFIRM_TTL_SECONDSNoNoLifetime of a confirmToken in seconds (default 600).
MCP_CONFIRM_SECRETNoYesSigning key for confirmTokens. Random per process by default; set it so a token issued just before a restart or redeploy still works (spent tokens are recorded on disk, so none can be replayed).

Checks

CheckResultDetail
Source repository linkedPasshttps://github.com/chrischall/apple-icloud-mcp
Version pinnedPassEvery package has an explicit version
Secrets requestedWarnAsks for 10 secrets: APPLE_PRIVATE_KEY, APPLE_MUSIC_PRIVATE_KEY, APPLE_MAPS_PRIVATE_KEY, APPLE_WEATHERKIT_PRIVATE_KEY, APPLE_MUSIC_DEVELOPER_TOKEN, APPLE_MUSIC_USER_TOKEN, APPLE_MUSIC_WEB_USER_TOKEN, APPLE_MUSIC_WEB_DEVELOPER_TOKEN, ICLOUD_APP_PASSWORD, MCP_CONFIRM_SECRET
Known package registryPassAll packages come from npm, PyPI, OCI, NuGet or MCPB
Namespace ownershipInfoName verified via GitHub account chrischall
Registry text aimed at the AIPassDescription and settings contain no hidden characters or instructions to the AI
Install scriptsPassapple-icloud-mcp@0.3.7 runs nothing at install
Code red flagsPassRead 88 files in apple-icloud-mcp@0.3.7: no obfuscation, encoded execution, credential reads or data-collection endpoints found
Text aimed at the AIPassNo hidden characters or instructions to the AI in 88 files, including comments and the README

Popularity & health: 47 / 100

Worked out from public numbers and our own checks, not from user reviews or ratings. It says how used and how looked-after a server is, not whether it is safe.

Popularity9 / 40

0 GitHub stars, 182 downloads last week, no Hacker News posts found. Best two of the three, each on a log scale.

Activity15 / 25

Last push 2026-10-24, last release 2026-10-20, 0 commits in 90 days.

Issue health8 / 15

5 closed of 5 issues, too few to judge. No data, so half marks.

Our checks16 / 20

1 warning, each costing a fifth.

0 forks, 57 merged pull requests. Sources: GitHub, npm, PyPI (pypistats.org) and Hacker News (Algolia), fetched 2026-10-31.

What people say

No Hacker News threads link to its source code.

Look further: search Reddit, search Hacker News, read its GitHub issues. These are not reviews we checked.

Facts

Registry nameio.github.chrischall/apple-icloud-mcp
PublisherGitHub account chrischall
How the name is verifiedName verified via GitHub account chrischall. The registry ties the name prefix to that account or domain; it does not check the code.
TypeLocal: runs on your machine from a package
Packagesnpm apple-icloud-mcp 0.3.7 (stdio)
Version0.3.7
Published
Last updated
Source repositoryhttps://github.com/chrischall/apple-icloud-mcp
WebsiteNone linked
CategoryAI & media generation (assigned by keyword rule, not by hand)

Related servers in AI & media generation