[AI] mcp 로 구글 캘린더 컨트롤해보자.

늘 공부하는 괴짜·2025년 4월 29일
0

AI : mcp

목록 보기
5/9

1. 일단 구글 프로젝트 생성

2. 사용자 인증 정보 > 서비스 계정 관리

3. 프로젝트의 서비스 계정 > 서비스 계정 만들기

4. 서비스 계정 정보, 권한 부여

생성이 완료되면 json 파일을 자동으로 떨궈준다. 소중하게 다룬다.

4-1. json 파일 재발급은 이렇게...

  • Google Cloud Console 접속
  • 로그인 후, 원하는 프로젝트를 선택
  • 왼쪽 사이드 메뉴에서 “IAM 및 관리자” → “서비스 계정” 으로 이동
  • 목록에서 원하는 서비스 계정을 클릭
  • 상단에서 “키” 탭을 선택
  • “키 추가” → “새 키 만들기” 클릭
  • 키 유형으로 JSON 선택 → “만들기” 클릭
  • 키 파일이 자동으로 다운로드 (.json 확장자)

---------- 여기까지는 구글 설정이었고! ------------

5. google_calendar_tool.py

from pydantic import BaseModel
from google.oauth2 import service_account
from googleapiclient.discovery import build
from fastmcp import FastMCP

mcp = FastMCP("calendar_project")

# 인증 설정
SCOPES = ["https://www.googleapis.com/auth/calendar"]
SERVICE_ACCOUNT_FILE = "<<서비스계정 json 파일 경로>>"  # 서비스 계정 JSON 파일 경로

credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES
)
service = build('calendar', 'v3', credentials=credentials)
calendar_id = '<<서비스계정 이메일>>'  # 서비스계정의 이메일

# 일정 추가 입력 모델
class CalendarEvent(BaseModel):
    summary: str
    start: str  # ISO 형식 "2025-04-30T15:00:00"
    end: str


def create_google_calendar_event(event: CalendarEvent):
    event_body = {
        'summary': event.summary,
        'start': {'dateTime': event.start, 'timeZone': 'Asia/Seoul'},
        'end': {'dateTime': event.end, 'timeZone': 'Asia/Seoul'},
    }
    created_event = service.events().insert(calendarId=calendar_id, body=event_body).execute()
    return {"status": "created", "event_id": created_event.get("id")}


def get_google_calendar_events(start_time: str, end_time: str):
    events_result = service.events().list(
        calendarId=calendar_id,
        timeMin=start_time,
        timeMax=end_time,
        maxResults=10,
        singleEvents=True,
        orderBy='startTime'
    ).execute()

    events = events_result.get('items', [])
    events_list = []
    
    for event in events:
        events_list.append({
            'id': event.get('id'),
            'summary': event.get('summary'),
            'start': event.get('start').get('dateTime'),
            'end': event.get('end').get('dateTime')
        })

    return {"events": events_list}


def delete_google_calendar_event(event_id: str):
    try:
        service.events().delete(calendarId=calendar_id, eventId=event_id).execute()
        return {"status": "deleted", "event_id": event_id}
    except Exception as e:
        return {"status": "error", "message": str(e)}


# 일정 추가 툴
@mcp.tool(
    name="create_calendar_event",
    description="Google Calendar에 일정을 추가합니다."
)
def create_calendar_event_tool(summary: str, start: str, end: str):
    res = create_google_calendar_event(CalendarEvent(summary=summary, start=start, end=end))
    return res

# 일정 조회 툴
@mcp.tool(
    name="get_calendar_events",
    description="Google Calendar에서 일정을 조회합니다."
)
def get_calendar_events_tool(start_time: str, end_time: str):
    res = get_google_calendar_events(start_time, end_time)
    return res

# 일정 삭제 툴
@mcp.tool(
    name="delete_calendar_event",
    description="Google Calendar에서 일정을 삭제합니다."
)
def delete_calendar_event_tool(event_id: str):
    res = delete_google_calendar_event(event_id)
    return res

if __name__ == "__main__":
    mcp.run()

6. cursor ai mcp 에 등록

    "calendar_project": {
      "command": "uv",
      "args": [
        "run",
        "D:/google-mcp/google_calendar_tool.py"
      ]
    }    

7. 구동!

7-1. 이벤트 조회

오...

7-2. 이벤트 등록

오오...

7-3. 이벤트 삭제

오오오...

Finally

이제 내 cursor ai 는 아주 훌륭한 mcp tool 연습장이 될 것이다.

profile
인공지능이라는 옷을 입었습니다. 뭔가 멋지면서도 잘 맞습니다.

0개의 댓글