`mcp-caldav`로 AI에 실제 캘린더 슈퍼파워 제공
Source: Dev.to
저장소: https://github.com/madbonez/caldav-mcp
TL;DR
“AI가 실제로 내 캘린더를 보고 관리하도록 할 수 있을까?”
mcp‑caldav는 CalDAV 호환 캘린더(Nextcloud, iCloud, FastMail, Yandex 등)를 AI 도구와 연결하는 MCP 서버입니다. 그럼 AI는 다음을 할 수 있습니다:
- 캘린더 목록 조회
- 일정 읽기
- 이벤트 생성(알림, 참석자, 반복 일정 포함)
- UID로 이벤트 검색 또는 삭제
이 프로젝트는 이미 인기 있는 awesome‑mcp‑servers 컬렉션에 포함되어 있어, 단순한 장난이 아니라는 것을 증명합니다.
프로젝트가 하는 일
| 방향 | 역할 |
|---|---|
| CalDAV | 캘린더 언어 – 이벤트, UID, RRULE, 참석자, 알림, 카테고리, 우선순위와 대화합니다. |
| MCP | LLM이 호출할 수 있는 깔끔한 도구 세트를 제공 – 캘린더 목록, 이벤트 생성, 이벤트 가져오기, 검색, 삭제. |
예시 워크플로우
- “이번 주 내 캘린더에 뭐가 있나요?”
- “내일 오후에 Alex와 30분 회의를 만들어요.”
- “다음 달에 #deep‑work 태그가 달린 모든 이벤트를 보여줘.”
- “방금 만든 Test meeting을 삭제해.”
마법 같은 건 없습니다 – 단지 캘린더와 AI 사이의 견고한 연결일 뿐입니다.
저장소 레이아웃
caldav-mcp/
├─ src/
│ └─ mcp_caldav/
│ ├─ __init__.py # main entry point / CLI
│ ├─ server.py # MCP server (tools, protocol wiring)
│ └─ client.py # CalDAV client wrapper (auth, HTTP, (de)serialization)
├─ tests/
│ ├─ test_server.py
│ └─ test_client.py
├─ e2e/ # end‑to‑end tests against a real CalDAV server
├─ pyproject.toml # packaging & dependency config
├─ Makefile # dev commands (make test, make check, …)
├─ README.md
├─ USAGE.md
└─ QUICKSTART.md
깨끗하고 중간 수준 개발자 친화적인 레이아웃: 명확한 진입점, 관심사의 분리, 그리고 실제 테스트 스위트.
Core Design Points
- Strict typing –
mypywith strict rules - Fast linting/formatting –
ruff - Pre‑commit hooks – keep style & checks consistent
mcp‑caldav 실행
uv 사용 (권장)
git clone https://github.com/madbonez/caldav-mcp.git
cd caldav-mcp
# Install runtime + dev deps, create .venv, generate uv.lock
uv sync --dev
서버 실행:
uv run mcp-caldav # from a local checkout
체크아웃 없이 배포된 패키지를 실행하려면:
uvx mcp-caldav
pip 사용
pip install -e .
mcp-caldav
모든 방법은 일반적인 Python CLI 진입점을 제공합니다.
구성
서버는 환경 변수에서 설정을 읽습니다:
export CALDAV_URL="https://caldav.example.com/"
export CALDAV_USERNAME="your-username"
export CALDAV_PASSWORD="your-password"
일반적인 CalDAV 엔드포인트
| 제공자 | URL |
|---|---|
| Yandex Calendar | https://caldav.yandex.ru/ |
| Google Calendar (CalDAV + OAuth) | https://apidata.googleusercontent.com/caldav/v2/ |
| Nextcloud | https://your-domain.com/remote.php/dav/calendars/username/ |
| ownCloud | https://your-domain.com/remote.php/dav/calendars/username/ |
| Apple iCloud | https://caldav.icloud.com/ (보통 앱 전용 비밀번호와 함께 사용) |
| FastMail | https://caldav.fastmail.com/dav/calendars/user/ |
참고: Yandex는 공격적인 속도 제한을 적용합니다 (≈ 60 초당 1 MB). 쓰기 작업이 많을 경우 504 타임아웃이 발생할 수 있습니다. 더 높은 처리량이 필요하면 Nextcloud 또는 Google을 사용하는 것이 좋습니다. 자세한 내용은
PROVIDER_NOTES.md를 참고하세요.
Cursor와 통합 (또는 MCP 인식 클라이언트와 통합)
mcp‑caldav를 전역 MCP 서버로 추가하여 AI가 캘린더 도구를 자동으로 호출할 수 있게 합니다.
uvx 사용 (로컬 체크아웃 없이)
{
"mcpServers": {
"mcp-caldav": {
"command": "uvx",
"args": ["mcp-caldav"],
"env": {
"CALDAV_URL": "https://caldav.example.com/",
"CALDAV_USERNAME": "your-username",
"CALDAV_PASSWORD": "your-password"
}
}
}
}
로컬 체크아웃 사용
{
"mcpServers": {
"mcp-caldav": {
"command": "uv",
"args": [
"run",
"--directory",
"/Users/you/dev/caldav-mcp",
"mcp-caldav"
],
"env": {
"CALDAV_URL": "https://caldav.example.com/",
"CALDAV_USERNAME": "your-username",
"CALDAV_PASSWORD": "your-password"
}
}
}
}
구성을 마치면 Cursor(또는 MCP 지원 클라이언트)는 다음 도구들을 LLM에 제공하게 됩니다.
노출된 MCP 도구
| Tool | Description |
|---|---|
| caldav_list_calendars | 액세스할 수 있는 모든 캘린더(개인, 업무, 공유 등)를 반환합니다. AI가 대상 캘린더를 선택하거나 사용 가능한 캘린더를 탐색하는 데 유용합니다. |
| caldav_create_event | 새 이벤트를 생성합니다: • 제목, 설명, 위치 • 시작/종료 타임스탬프 또는 기간 • 반복 규칙(매일/매주/매월/매년) • 카테고리/태그 • 우선순위(0‑9) • 상태가 있는 참석자 • 다중 알림 |
| caldav_get_events | 날짜 범위 내의 이벤트를 가져옵니다. UID, 카테고리, 우선순위, 참석자 및 상태, 반복 상세 정보, 알림 등을 반환합니다. |
| caldav_get_today_events | 오늘의 모든 이벤트를 반환합니다(하루 종일 일정 포함). “목요일에 뭐가 있나요?”와 같은 질문에 적합합니다. |
| caldav_search_events | 키워드, 태그 또는 기타 메타데이터로 검색합니다. |
| caldav_delete_event | UID로 이벤트를 삭제합니다. |
These tools give you a full CRUD interface to any CalDAV calendar from within your LLM‑driven workflow.
빠른 요약
- Clone / install 저장소를 복제/설치합니다 (uv 또는 pip).
- Set environment variables CalDAV 서버에 대한 환경 변수를 설정합니다.
- Run
mcp-caldav. - Configure MCP 클라이언트(Cursor 등)를 서버를 가리키도록 설정합니다.
- Ask AI에게 자연어 캘린더 질문을 하면 – 내부에서 적절한 MCP 도구를 호출합니다.
AI의 뇌에 진정으로 살아있는 캘린더를 즐겨보세요!
CalDAV MCP 도구 개요
caldav_get_week_events
현재 주의 이벤트를 반환합니다.
- 주가 **“오늘”**부터 시작할지 월요일부터 시작할지 정의하는 옵션.
- 주간‑계획 프롬프트에 적합합니다.
고급 작업
caldav_get_event_by_uid
UID 로 단일 이벤트를 조회합니다.
사용 사례: “방금 언급한 마지막 회의에 대한 자세한 정보를 보여줘.”
caldav_delete_event
UID 로 이벤트를 삭제합니다.
사용 사례: 테스트 이벤트를 정리하거나 회의를 프로그래밍 방식으로 취소할 때.
caldav_search_events
다음 항목으로 검색:
- 텍스트 (제목 / 설명)
- 위치
- 참석자
예시:
- “올해 제목에 ‘performance review’ 가 포함된 모든 이벤트를 찾아줘.”
- “지난 달에 Alice 와 있는 회의를 보여줘.”
- “다음 분기에 #deep‑work 로 태그된 모든 이벤트를 목록으로 보여줘.”
개발 도구
프로젝트는 견고한 품질 보증 스택을 구성합니다:
| 도구 | 목적 |
|---|---|
| ruff | 빠른 린팅 + 포맷팅 |
| mypy | 정적 타입 검사 |
| pre‑commit | 커밋하기 전에 검사를 실행합니다 |
시작하기
# Install all dependencies (including dev group)
uv sync --group dev
일반적인 Make 명령
| 명령 | 설명 |
|---|---|
make check | 전체 품질 검사를 실행 |
make lint | 린팅만 실행 |
make format | 코드 포맷팅 |
make type-check | 정적 타입 검사 실행 |
make test | 전체 테스트 실행 |
make test-unit | 단위 테스트만 실행 |
make test-e2e | 엔드‑투‑엔드 테스트 실행 (실제 CalDAV 서버 필요) |
make test-cov | 터미널에 커버리지 표시 |
make coverage-html | HTML 커버리지 보고서 생성 (htmlcov/) |
엔드‑투‑엔드 테스트 설정
-
예시 env 파일을 복사합니다:
cp .env.e2e.example .env.e2e -
.env.e2e에 실제 CalDAV 자격 증명을 입력합니다. -
테스트를 실행합니다:
make test-e2e
awesome-mcp-servers Listing
awesome-mcp-servers 목록은 고품질 MCP 서버들을 선별합니다. mcp-caldav가 적합한 이유는 다음과 같습니다:
- 표준 프로토콜을 통해 AI를 실제 데이터(캘린더)와 연결합니다.
- 깔끔하고 비교적 작은 코드베이스라 탐색이 쉽습니다.
- 충분한 테스트 구성(단위 테스트 + E2E).
- 유용한 문서(
README.md,USAGE.md,QUICKSTART.md,PROVIDER_NOTES.md).
왜 이 레포를 참고용으로 사용할까?
- 관심사의 분리: 전송 계층(MCP) vs. 도메인 로직(CalDAV 클라이언트).
- 표현력 있는 툴 인터페이스: 작지만 강력한 API.
- 플러그‑인‑플레이: 휠을 다시 만들 필요 없이 기존 CalDAV 서버와 바로 작동.
AI가 단순 채팅을 넘어 실제로 일정 관리까지 하게 하고 싶다면 mcp-caldav가 탄탄한 출발점이 됩니다:
- 표준 프로토콜(CalDAV)을 사용합니다.
- 명확히 정의된 MCP 툴을 제공합니다.
- awesome-mcp-servers에 소개될 만큼 충분히 검증되었습니다.
🔗 https://github.com/madbonez/caldav-mcp
자신만의 설정에 자유롭게 연결하거나 확장해 보세요(예: 업데이트/패치 작업 추가 또는 더 풍부한 검색 기능). 이는 MCP 기반 워크플로를 진지하게 구축하려는 사람이 기대하는 바로 그 작업입니다.