apple icloud mcp for VS Code
io.github.chrischall/apple-icloud-mcp
Unofficial: Apple Music, iCloud Calendar/Contacts/Mail, Apple Maps and WeatherKit, no Mac needed
client:VS Code
transport:stdio
runtime:npm
Install apple icloud mcp in VS Code
.vscode/mcp.json
{
"inputs": [
{
"type": "promptString",
"id": "apple-team-id",
"description": "APPLE_TEAM_ID",
"password": true
},
{
"type": "promptString",
"id": "apple-key-id",
"description": "APPLE_KEY_ID",
"password": true
},
{
"type": "promptString",
"id": "apple-private-key",
"description": "APPLE_PRIVATE_KEY",
"password": true
},
{
"type": "promptString",
"id": "apple-private-key-path",
"description": "APPLE_PRIVATE_KEY_PATH",
"password": true
},
{
"type": "promptString",
"id": "apple-music-key-id",
"description": "APPLE_MUSIC_KEY_ID",
"password": true
},
{
"type": "promptString",
"id": "apple-music-private-key",
"description": "APPLE_MUSIC_PRIVATE_KEY",
"password": true
},
{
"type": "promptString",
"id": "apple-maps-key-id",
"description": "APPLE_MAPS_KEY_ID",
"password": true
},
{
"type": "promptString",
"id": "apple-maps-private-key",
"description": "APPLE_MAPS_PRIVATE_KEY",
"password": true
},
{
"type": "promptString",
"id": "apple-weatherkit-key-id",
"description": "APPLE_WEATHERKIT_KEY_ID",
"password": true
},
{
"type": "promptString",
"id": "apple-weatherkit-private-key",
"description": "APPLE_WEATHERKIT_PRIVATE_KEY",
"password": true
},
{
"type": "promptString",
"id": "apple-weatherkit-service-id",
"description": "APPLE_WEATHERKIT_SERVICE_ID",
"password": true
},
{
"type": "promptString",
"id": "apple-music-developer-token",
"description": "APPLE_MUSIC_DEVELOPER_TOKEN",
"password": true
},
{
"type": "promptString",
"id": "apple-music-user-token",
"description": "APPLE_MUSIC_USER_TOKEN",
"password": true
},
{
"type": "promptString",
"id": "apple-music-web-user-token",
"description": "APPLE_MUSIC_WEB_USER_TOKEN",
"password": true
},
{
"type": "promptString",
"id": "apple-music-web-developer-token",
"description": "APPLE_MUSIC_WEB_DEVELOPER_TOKEN",
"password": true
},
{
"type": "promptString",
"id": "apple-music-storefront",
"description": "APPLE_MUSIC_STOREFRONT",
"password": true
},
{
"type": "promptString",
"id": "icloud-username",
"description": "ICLOUD_USERNAME",
"password": true
},
{
"type": "promptString",
"id": "icloud-app-password",
"description": "ICLOUD_APP_PASSWORD",
"password": true
},
{
"type": "promptString",
"id": "icloud-mail-address",
"description": "ICLOUD_MAIL_ADDRESS",
"password": true
},
{
"type": "promptString",
"id": "icloud-default-calendar",
"description": "ICLOUD_DEFAULT_CALENDAR",
"password": true
},
{
"type": "promptString",
"id": "apple-write-mode",
"description": "APPLE_WRITE_MODE",
"password": true
},
{
"type": "promptString",
"id": "apple-services",
"description": "APPLE_SERVICES",
"password": true
},
{
"type": "promptString",
"id": "display-tz",
"description": "DISPLAY_TZ",
"password": true
},
{
"type": "promptString",
"id": "apple-units",
"description": "APPLE_UNITS",
"password": true
},
{
"type": "promptString",
"id": "apple-state-cache",
"description": "APPLE_STATE_CACHE",
"password": true
},
{
"type": "promptString",
"id": "apple-request-timeout-ms",
"description": "APPLE_REQUEST_TIMEOUT_MS",
"password": true
},
{
"type": "promptString",
"id": "apple-debug-log",
"description": "APPLE_DEBUG_LOG",
"password": true
},
{
"type": "promptString",
"id": "mcp-confirm-mode",
"description": "MCP_CONFIRM_MODE",
"password": true
},
{
"type": "promptString",
"id": "mcp-confirm-elicitation",
"description": "MCP_CONFIRM_ELICITATION",
"password": true
},
{
"type": "promptString",
"id": "mcp-confirm-ttl-seconds",
"description": "MCP_CONFIRM_TTL_SECONDS",
"password": true
},
{
"type": "promptString",
"id": "mcp-confirm-secret",
"description": "MCP_CONFIRM_SECRET",
"password": true
}
],
"servers": {
"apple-icloud-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"apple-icloud-mcp"
],
"env": {
"APPLE_TEAM_ID": "${input:apple-team-id}",
"APPLE_KEY_ID": "${input:apple-key-id}",
"APPLE_PRIVATE_KEY": "${input:apple-private-key}",
"APPLE_PRIVATE_KEY_PATH": "${input:apple-private-key-path}",
"APPLE_MUSIC_KEY_ID": "${input:apple-music-key-id}",
"APPLE_MUSIC_PRIVATE_KEY": "${input:apple-music-private-key}",
"APPLE_MAPS_KEY_ID": "${input:apple-maps-key-id}",
"APPLE_MAPS_PRIVATE_KEY": "${input:apple-maps-private-key}",
"APPLE_WEATHERKIT_KEY_ID": "${input:apple-weatherkit-key-id}",
"APPLE_WEATHERKIT_PRIVATE_KEY": "${input:apple-weatherkit-private-key}",
"APPLE_WEATHERKIT_SERVICE_ID": "${input:apple-weatherkit-service-id}",
"APPLE_MUSIC_DEVELOPER_TOKEN": "${input:apple-music-developer-token}",
"APPLE_MUSIC_USER_TOKEN": "${input:apple-music-user-token}",
"APPLE_MUSIC_WEB_USER_TOKEN": "${input:apple-music-web-user-token}",
"APPLE_MUSIC_WEB_DEVELOPER_TOKEN": "${input:apple-music-web-developer-token}",
"APPLE_MUSIC_STOREFRONT": "${input:apple-music-storefront}",
"ICLOUD_USERNAME": "${input:icloud-username}",
"ICLOUD_APP_PASSWORD": "${input:icloud-app-password}",
"ICLOUD_MAIL_ADDRESS": "${input:icloud-mail-address}",
"ICLOUD_DEFAULT_CALENDAR": "${input:icloud-default-calendar}",
"APPLE_WRITE_MODE": "${input:apple-write-mode}",
"APPLE_SERVICES": "${input:apple-services}",
"DISPLAY_TZ": "${input:display-tz}",
"APPLE_UNITS": "${input:apple-units}",
"APPLE_STATE_CACHE": "${input:apple-state-cache}",
"APPLE_REQUEST_TIMEOUT_MS": "${input:apple-request-timeout-ms}",
"APPLE_DEBUG_LOG": "${input:apple-debug-log}",
"MCP_CONFIRM_MODE": "${input:mcp-confirm-mode}",
"MCP_CONFIRM_ELICITATION": "${input:mcp-confirm-elicitation}",
"MCP_CONFIRM_TTL_SECONDS": "${input:mcp-confirm-ttl-seconds}",
"MCP_CONFIRM_SECRET": "${input:mcp-confirm-secret}"
}
}
}
}
VS Code prompts for each input the first time the server starts, so no secret is written to the file. VS Code docs