회사 메일·캘린더·Teams를 Claude가 읽고, 중요한 건 Telegram으로 알려준다

지난번에 LLM Wiki + Telegram Bot을 만들었다. Claude Code가 개인 위키를 관리하고, Telegram으로 원격 조종하는 구조였다. 이번에는 여기에 Microsoft 365 연동을 붙였다. 회사 메일, 캘린더, Teams 대화를 자동으로 가져와서 위키에 쌓고, 중요한 건 Telegram으로 알려주는 시스템이다.

문제: 정보가 흩어져 있다

하루에 확인해야 할 채널이 너무 많다. Outlook 메일, Teams 채팅, 캘린더 일정이 각각 다른 앱에 흩어져 있다. 중요한 메시지를 놓치거나, “오늘 뭐 해야 하지?” 하고 여러 앱을 번갈아 열어보는 시간이 아깝다.

원하는 건 단순하다:

  • 메일, 캘린더, Teams를 한 곳에 모아서 보고
  • 중요한 건 알아서 알려주고
  • 나머지는 나중에 찾을 수 있게 쌓아두기

해결: mogcli + Claude + Telegram

mogcli라는 오픈소스 CLI 도구를 발견했다. Microsoft Graph API를 래핑해서, 터미널에서 메일/캘린더/Teams를 조작할 수 있다. 이걸 5분마다 자동 실행하고, Claude가 중요도를 판단해서 Telegram으로 알려주는 파이프라인을 만들었다.

전체 구조

systemd timer (5분 주기)
    |
    v
m365-sync.sh (bash 스크립트)
    |
    +-- mogcli: 메일, 캘린더 가져오기
    +-- Graph API: Teams 대화 가져오기
    |
    v
raw/m365/ (JSON 원본 축적)
    |
    +-- latest-mail.json      (항상 최신)
    +-- latest-calendar.json
    +-- latest-teams.json
    +-- 2026-04-16/           (일별 히스토리)
    |       mail-1043.json
    |       calendar-1043.json
    |       teams-1043.json
    |
    v
새 메시지 감지 (이전 스냅샷과 비교)
    |
    v
claude -p --model haiku (중요도 판단)
    |
    +-- 중요하면 --> Telegram 알림
    +-- 아니면 --> 조용히 넘어감
    |
    v
Claude가 위키에 ingest (CLAUDE.md 규칙에 따라)

1단계: mogcli 설치

mogcli는 Go로 작성되어 있어서 go install로 바로 설치할 수 있다.

# Go 설치 (mise 사용)
mise use -g go@latest

# mogcli 설치
go install github.com/jaredpalmer/mogcli/cmd/mog@latest

2단계: Microsoft Entra 앱 등록

mogcli가 회사 Microsoft 365에 접근하려면 Entra(구 Azure AD)에 앱을 등록해야 한다.

  1. entra.microsoft.com에서 App registrations > New registration
  2. Authentication 탭에서:
    • Mobile and desktop applications 플랫폼 추가
    • https://login.microsoftonline.com/common/oauth2/nativeclient 체크
    • Settings 탭에서 Allow public client flows > Yes
  3. API permissions에서 Microsoft Graph Delegated 권한 추가:
    • Mail.Read, Calendars.Read, Contacts.Read, Tasks.Read, User.Read
    • Teams용: Chat.Read, ChannelMessage.Read.All
  4. Grant admin consent 클릭 (Teams 권한에 필요)

3단계: 인증

mog auth
# Application (client) ID 입력
# Tenant ID 입력
# 브라우저에서 디바이스 코드 인증 완료

인증이 완료되면 바로 사용할 수 있다:

# 메일 가져오기
mog mail list --max 20 --json

# 이번 주 캘린더
mog calendar list --from 2026-04-14 --to 2026-04-20 --json

Teams는 mogcli에서 아직 지원하지 않아서, mogcli의 토큰을 꺼내서 Graph API를 직접 호출한다:

TOKEN=$(cat ~/.config/mogcli/keyring/... | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")

curl -s -H "Authorization: Bearer $TOKEN" \
  "https://graph.microsoft.com/v1.0/me/chats?\$top=10&\$expand=lastMessagePreview"

4단계: 5분마다 자동 수집

bash 스크립트를 만들어서 systemd user timer로 5분마다 실행한다.

# systemd service
# ~/.config/systemd/user/m365-sync.service
[Unit]
Description=Microsoft 365 Sync

[Service]
Type=oneshot
ExecStart=/home/user/llmwiki/bot/m365-sync.sh
# systemd timer
# ~/.config/systemd/user/m365-sync.timer
[Unit]
Description=Microsoft 365 Sync every 5 minutes

[Timer]
OnBootSec=1min
OnUnitActiveSec=5min
Persistent=true

[Install]
WantedBy=timers.target
# 활성화
systemctl --user daemon-reload
systemctl --user enable --now m365-sync.timer

스크립트는 매번:

  1. 메일, 캘린더, Teams 원본 JSON을 raw/m365/에 축적
  2. latest-*.json으로 최신 스냅샷 유지
  3. 이전 스냅샷과 비교하여 새 메시지 감지
  4. 내가 보낸 메시지, 뉴스레터, GitLab 알림 등은 자동 필터링

5단계: Claude가 중요도 판단

여기가 핵심이다. 키워드 매칭이 아니라, Claude가 내용을 읽고 판단한다.

# 새 메시지를 Claude에게 파이프
echo "$NEW_MESSAGES" | claude -p --model haiku \
  "이 메시지들 중 즉시 확인해야 할 중요한 것이 있는지 판단하라.
   중요하면 Telegram 알림 메시지를 작성하라.
   출처를 명시하라 (메일/Teams).
   중요한 게 없으면 NONE만 출력하라."

Claude(haiku 모델)가 빠르게 판단해서:

  • 팀원의 업무 요청, 장애 보고, 미팅 변경 등은 알림
  • 광고, 뉴스레터, 단순 정보 공유는 무시

알림이 결정되면 Telegram Bot API로 발송한다. 각 메시지에 출처(메일/Teams)가 명시되어 있어서, 어디서 온 건지 바로 알 수 있다.

6단계: Claude가 위키에 정리

축적된 raw JSON은 Claude가 위키에 정리한다. CLAUDE.md에 ingest 규칙을 정의해두면, Claude가 대화 중에 자연스럽게 데이터를 읽고 일간 노트에 정리한다:

  • 오늘 일정을 타임라인으로 표시
  • 중요 메일만 필터링하여 목록
  • Teams 대화에서 액션 아이템 추출
  • 할 일 목록 업데이트

결과

이제 아침에 Telegram만 확인하면 된다. 중요한 메일이나 Teams 메시지가 오면 Claude가 알아서 판단해서 알려준다. Outlook이나 Teams 앱을 열지 않아도, 놓치는 게 없다.

raw 데이터는 날짜별로 쌓이니까, 나중에 “지난주에 누가 뭐라고 했더라?” 같은 질문에도 Claude가 검색해서 답해줄 수 있다.

지난번 LLM Wiki + Telegram Bot이 “내가 Claude에게 물어보는” 구조였다면, 이번에는 “Claude가 먼저 알려주는” 구조가 추가된 셈이다. 수동 질의에서 능동 알림으로.

사용한 도구

  • mogcli – Microsoft Graph CLI (Go, MIT)
  • Claude Code – CLI에서 claude -p로 파이프 분석
  • systemd user timer – 5분 주기 실행
  • Telegram Bot API – 알림 발송
  • Microsoft Entra – 앱 등록 및 OAuth 인증

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다