프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

Apple Calendar

제작자: JonathanRReed버전 1.1.6i★ –i내 컴퓨터에서 실행
레지스트리 이름io.github.JonathanRReed/apple-calendar-mcp

설치

개요

제작자가 쓴 설명(영어 원문)

List, create, update, and delete events in Apple Calendar on macOS.

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 내 컴퓨터에서 실행
  • 전송 방식: stdio
  • 카테고리: 문서, 시트 및 사무 업무

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
  • 직접 입력할 값: APPLE_CALENDAR_MCP_SAFETY_MODE, APPLE_CALENDAR_MCP_ALLOWED_CALENDARS, APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS

필요한 것

  • PyPIPython의 uv 설치(uvx 명령어용)

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

제작자의 .mcpb 파일 다운로드

링크는 제작자의 파일로 바로 연결돼요. 우리가 보관하거나 다시 패키징하지 않아요. 파일을 열면 Claude Desktop이 설치해요.

터미널에서 이 명령어를 실행하세요

claude mcp add apple-calendar --env APPLE_CALENDAR_MCP_SAFETY_MODE=your-value --env APPLE_CALENDAR_MCP_ALLOWED_CALENDARS=your-value --env APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS=your-value -- uvx apple-calendar-mcp

실행하기 전에 빈 값을 채워 주세요.

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "apple-calendar": {
      "command": "uvx",
      "args": [
        "apple-calendar-mcp"
      ],
      "env": {
        "APPLE_CALENDAR_MCP_SAFETY_MODE": "your-value",
        "APPLE_CALENDAR_MCP_ALLOWED_CALENDARS": "your-value",
        "APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "apple-calendar": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "apple-calendar-mcp"
      ],
      "env": {
        "APPLE_CALENDAR_MCP_SAFETY_MODE": "your-value",
        "APPLE_CALENDAR_MCP_ALLOWED_CALENDARS": "your-value",
        "APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

직접 입력할 값

  • APPLE_CALENDAR_MCP_SAFETY_MODE env
    Safety mode for Calendar operations: safe_readonly, safe_manage, or full_access.
  • APPLE_CALENDAR_MCP_ALLOWED_CALENDARS env
    Comma-separated allow-list of calendar names. Empty allows all calendars.
  • APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS env
    Comma-separated allow-list of calendar names that may be written to (create/update/delete). Reads are unaffected, so a client can see every calendar while only being able to modify these. Empty appli…

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 9일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 JonathanRReed 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

문서, 시트 및 사무 업무 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 3598개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 3598개 중 90%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 3598개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

Apple Calendar, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.1.6)은 3일 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv), MCPB도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: Agent-Native Calendar, Excel MCP Server, MCP Server for Excel

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

Agent-Native Calendar

Agent-Native Google Calendar - manage events, sync, and public booking

제작자: BuilderIO널리 사용됨★ 7.6천2개월 전 업데이트

클라우드에서 실행

Excel MCP Server

Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.

제작자: haris-musa널리 사용됨↓ 5만/주★ 4.3천8일 전 업데이트

내 컴퓨터에서 실행

MCP Server for Excel

Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.

제작자: sbroenne성장 중↓ 4.3천/주★ 8475일 전 업데이트

내 컴퓨터에서 실행

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

Apple Calendar

MCP server for Apple Calendar on macOS.

Provides access to calendars and events through EventKit. Keep Calendar as the system of record while enabling agents to read, create, update, and delete events.

When to use

  • Calendar-only workflows
  • EventKit-backed calendar access without the all-in-one server
  • Tighter app-level separation for scheduling

What It Does

  • Discover and list calendars
  • Create, read, update, and delete events
  • Tool discovery helpers search_tools and get_tool_info for context-constrained clients
  • Today resources and planning prompts
  • Health checks that distinguish empty results from blocked access
  • Read fallback through Calendar.app automation when native EventKit reads are blocked on supported local setups
  • Permission recovery: calendar_permission_guide, calendar_recheck_permissions

Install On This Mac

Quick start (uvx, from PyPI)

With uv installed:

uvx apple-calendar-mcp

No clone, no venv management.

From a clone

git clone https://github.com/JonathanRReed/Apple-MCPs.git

cd Apple-MCPs uv sync --all-packages

This builds one workspace environment with every server's entry point in .venv/bin (for example .venv/bin/apple-calendar-mcp). You can also point an MCP client at Apple-Calendar-MCP/start.sh, which prefers uv run and falls back to a plain venv bootstrap (Python 3.11+ required).

Install In AI Agents

Generic MCP client config

{

"mcpServers": { "apple-calendar": { "command": "uvx", "args": ["apple-calendar-mcp"], "env": { "APPLE_CALENDAR_MCP_SAFETY_MODE": "safe_manage" } } } }

Running from a clone instead? Use /path/to/Apple-MCPs/Apple-Calendar-MCP/start.sh as the command with empty args.

Claude Code example

claude mcp add --transport stdio --scope user apple-calendar -- uvx apple-calendar-mcp

--scope user makes the server available in every project. To share it with one repository through its .mcp.json instead, use --scope project.

Selecting calendar and event identifiers

Call calendar_list_calendars, select the intended calendar by its displayed name and source, and pass its returned calendar_id unchanged to calendar_list_events, calendar_create_event or the destination of calendar_update_event. Native EventKit listings return native identifiers; automation listings use calendar names as identifiers. When EventKit can read calendars, a calendar name passed to calendar_create_event or calendar_update_event is resolved to its native calendar, ignoring case and extra whitespace, so the write keeps full alarm support. A name shared by several calendars returns AMBIGUOUS_CALENDAR with the candidates; pass the intended calendar_id instead. Unknown names return CALENDAR_NOT_FOUND and read-only calendars return CALENDAR_READ_ONLY. Without native calendar read access, names still use automation.

After changing Calendar permissions, restart the MCP server and call calendar_list_calendars again to refresh identifiers. For full alarm replacement or clearing, list events with the native calendar_id and pass the returned native event_id to calendar_update_event. Existing applescript:: event IDs still use automation after permissions change. Treat event IDs as opaque: re-list to obtain native IDs instead of rewriting an existing token. Calendar writability, safety modes and allowlists still apply.

Bridge Batch Lookup

The internal Python CalendarBridge.get_events(event_ids) method batches native lookups without adding an MCP tool. Pass a sequence of non-empty strings, at most 10000 input IDs. Duplicate input IDs are resolved once. Requests are chunked to an exact 32768-byte UTF-8 JSON argv budget, including JSON escaping; an individual oversized ID is rejected before any lookup.

The returned mapping distinguishes:

  • An event value: a validated response for the requested ID
  • None: an explicit native miss confirmed through the existing single-get/JXA fallback, or a definitive miss on that fallback path
  • An absent key: unknown, including unanswered, malformed, contradictory, duplicate-response, mismatched, or unsupported entries

JXA-issued IDs are opaque versioned tokens that identify the Automation backend, calendar scope, and exact UID or id() namespace/value. Do not parse or construct them. UID-less events keep their actual typed id() value; distinct events with identical metadata no longer collapse. Rows without usable identifiers, or duplicate provider identities, receive display-only weak tokens. Weak tokens cannot prove absence or authorize writes.

Versioned tokens resolve directly through verified, server-filtered JXA lookups. A single matching calendar and event are required; ambiguous, unavailable, malformed, or mismatched lookups remain unknown. No unfiltered event-directory scan is used. Lookup snapshots are capped at 1000 calendars and 1000 returned matches per query, and identifiers at 32768 characters. Legacy bare UID/id values still resolve when their namespaces unambiguously identify the same event. Legacy calendar/start/title composites remain readable when unique, but cannot authorize mutations or definitive batch absence. Legacy values that resemble versioned tokens are rejected if their meanings conflict.

Legacy fallback identifiers, including encoded identifiers that could also be literal provider UIDs, require collision checks across calendars. Those exact queries can exceed the 30-second fallback deadline on large calendar stores. A timeout is an explicit error and does not establish absence or permit a mutation. Full native EventKit access avoids that fallback lookup for native identifiers: grant the host app full Calendar access, list events again to obtain native IDs, then retry. Existing fallback identifiers retain their strict collision checks.

Native misses retry the single-get/JXA path. If the whole native batch cannot answer, a fallback miss for an opaque native ID remains unknown because JXA may use a different identifier format. A verified versioned JXA miss can establish absence. Permission or per-ID confirmation failures remain unknown; non-fallback whole-helper transport failures remain explicit errors. A valid native reply with a different canonical ID requires a separate single-get lookup confirming that canonical ID. Conflicting or unconfirmed aliases remain unknown. Unsupported legacy uid: IDs remain unknown without a lookup. Callers must not delete mappings for absent keys.

JXA in-place updates and deletion require a strong, unique identity and reject stale calendar names before writing. Calendar moves through the JXA fallback are explicitly unsupported because cloning cannot safely preserve every event field. Native Calendar moves remain available. Recurrence updates through versioned JXA IDs are also unsupported.

The native batch command itself reports EventKit-only lookup outcomes. Synthetic IDs produce UNSUPPORTED_IDENTIFIER; native EVENT_NOT_FOUND alone is not a confirmed absence across both backends.

Safety Modes

  • safe_readonly
  • safe_manage
  • full_access
Calendar allowlists

Set these environment variables in your MCP client's configuration, then restart the server:

VariableEffect
APPLE_CALENDAR_MCP_ALLOWED_CALENDARSComma-separated calendar names the server may read or modify. Calendar listings, event listings, event details, and Calendar resources respect this scope.
APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARSAdditional comma-separated calendar names the server may create, update, or delete events in. It does not hide other readable calendars.

For an assistant that may read your schedule but only write to a dedicated calendar:

{

"APPLE_CALENDAR_MCP_SAFETY_MODE": "safe_manage", "APPLE_CALENDAR_MCP_WRITE_ALLOWED_CALENDARS": "AI Planning" }

Leaving either allowlist unset or empty applies no restriction from that list. When both are set, writes must pass both; safe_readonly blocks all writes regardless of either list. Moving an event checks both the source and destination calendar. A write with an unresolved target is rejected when an allowlist is configured.

Names are exact, case-sensitive matches after trimming configuration whitespace. Every calendar with a matching name is included, so use unique calendar names for security-sensitive scopes. calendar_health reports the configured write allowlist.

These are policies enforced by the Python MCP server, not a macOS sandbox. Direct use of the native helper or bridge library does not enforce them. macOS permissions still apply, and your MCP client may send returned data to its model provider.

Transport

stdio is the default and recommended transport. Set APPLE_CALENDAR_MCP_TRANSPORT=streamable-http (with optional APPLE_CALENDAR_MCP_HOST and APPLE_CALENDAR_MCP_PORT) to serve Streamable HTTP instead.

macOS Permissions

  • Calendar access is required
  • calendar_health reports native access_status, read access, and write access without trying AppleScript fallback or requesting permissions. Explicit Calendar reads can still use the existing automation fallback.

Launch Checklist

  • Add uvx apple-calendar-mcp (or a clone's Apple-Calendar-MCP/start.sh) to your MCP client
  • Reload or reconnect the client so the Calendar tool surface is loaded into context
  • Call calendar_health first
  • If access is blocked or access_status is not_determined, call calendar_permission_guide
  • After changing macOS permissions, call calendar_recheck_permissions

Prompting Notes

  • tools/list returns the full Calendar tool surface. Context-constrained clients can use search_tools first, then get_tool_info for the Calendar tool they need.
  • Before creating events, confirm the date, time, duration, and title with the user
  • Use Calendar for scheduled time blocks, meetings, and appointments

Related

  • Apple-Tools-MCP
Event alerts

calendar_create_event and calendar_update_event accept alarms: an array of { "minutes_before": 15 } or { "absolute_iso": "2030-10-11T10:00:00Z" } objects. Absolute dates require an explicit Z or UTC offset; timezone-naive dates are rejected. Relative offsets must be whole minutes from 0 through 525600; each event accepts at most 100 alarms. Omit alarms to preserve existing alerts on update, or pass [] to clear them.

Event detail and list responses include alarm metadata. EventKit reports relative, absolute, and location alerts. Full alarm replacement and clearing require native EventKit access. The Calendar scripting fallback can create initial display alerts and read the alert types exposed by Calendar's scripting dictionary. If an alarm edit requires removing existing alerts, or the existing alert collections cannot be read, it returns ALARM_EDIT_REQUIRES_NATIVE before changing any event fields. Omit alarms to preserve existing alerts while updating other fields. Fallback updates that combine explicit alarms (including []) with any non-null title, time, location, notes or all-day field require native EventKit, even if that field already has the supplied value. An unchanged calendar_id is not a field write; moves remain unsupported. Alarm-only updates can add initial display alerts when all four alert collections are readable and empty; [] is then a no-op. Fallible event-record reads finish before insertion. If an insertion fails or a mutation times out, the outcome may be unknown: no individual alerts are deleted, and the event must be inspected before retrying. Fallback parity

앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요

PopNx에게 묻기