Skip to content
VS Code

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

apple icloud mcp in other clients