Power Automate와 소규모 MCP 서버를 사용하여 Claude에게 내 M365 계정 권한을 부여한 방법
요약
사용자가 테넌트 관리자 권한 없이도 Claude가 Microsoft 365 작업을 수행할 수 있도록 Power Automate와 MCP(Model Context Protocol)를 결합한 자동화 방식을 소개합니다. FastMCP 서버를 통해 Claude의 도구 호출을 Power Automate의 HTTP 웹훅으로 전달함으로써 이메일, 일정, OneDrive 등 다양한 M365 기능을 제어할 수 있습니다.
핵심 포인트
- 관리자 권한 승인 없이도 기존의 Power Automate 커넥터를 활용해 에이전트 도구 액세스를 구현할 수 있음
- Claude -> MCP 서버 -> Power Automate 웹훅 -> M365로 이어지는 단순하고 실용적인 아키텍처 제안
- FastMCP와 Python을 사용하여 소규모의 맞춤형 MCP 서버 구축 가능
- 공식 API 통합이 어려운 기업 환경에서 기존 자동화 도구를 활용한 우회 전략의 유용성 확인
최근에 MCP (Model Context Protocol) 서버를 만져보고 있었는데, 드디어 "멋진 데모일 뿐 다시는 쓰지 않을 것" 같은 수준이 아니라 정말 유용하게 느껴지는 서버를 하나 작동시켰습니다.
문제는 이렇습니다. 저는 Claude가 저를 위해 기본적인 Microsoft 365 작업을 수행할 수 있기를 원했습니다:
- 내 편지함 읽기
- 초안 작성/후속 조치 이메일 보내기
- 내 일정 확인하기
- OneDrive에 노트 저장하기
- Planner 작업 생성하기
- Excel에 행 쓰기
- Word 템플릿 채우기
하지만 저는 테넌트 관리자 (tenant admin) 권한이 없었고, 개인적인 자동화를 위해 Graph 권한 승인을 받을 생각도 없었습니다.
해결책은 Power Automate (PA)였습니다.
모든 작업은 HTTP 트리거가 있는 PA 플로우 (flow)입니다. PA는 서명된 웹훅 (webhook) URL을 제공합니다. 플로우는 제가 이미 가지고 있는 권한을 사용하여 제 계정으로 실행됩니다. 그런 다음 저는 이 웹훅 URL들 앞에 소규모 FastMCP 서버를 두고 이를 Claude에 연결했습니다.
이제 Claude 채팅에서 다음과 같이 말할 수 있습니다:
- "이 내용의 요약을 이메일로 보내줘."
- "내일 내 일정에 뭐가 있지?"
- "이 노트를 OneDrive의 /Projects 폴더에 저장해줘."
- "이 후속 조치를 위해 Planner 작업을 생성해줘."
- "이 행을 추적 스프레드시트에 추가해줘."
내부적으로 Claude는 단순히 m365_send_email, m365_calendar_read, onedrive_create_file 등과 같은 MCP 도구 (tools)를 호출합니다. MCP 서버가 Power Automate에 JSON을 전송하면, PA가 실제 M365 작업을 수행합니다.
아키텍처는 결코 화려하지 않습니다, 절대 아닙니다:
Claude -> MCP tool -> FastMCP server -> PA webhook -> M365 connector
저는 저렴한 VPS에서 MCP 서버를 실행하고 있습니다. 약 200줄의 Python 코드와 플로우 이름 및 URL이 담긴 JSON 설정 파일로 구성되어 있습니다.
이는 또한 "에이전트 도구 액세스 (agent tool access)"가 항상 완벽한 공식 API 통합을 필요로 하는 것은 아니라는 점을 상기시켜 주는 좋은 사례였습니다. 때로는 이미 가지고 있는 투박한 기업용 도구만으로도 충분합니다.
가장 웃겼던 버그: 플로우를 복제하면서 설정 파일의 URL을 업데이트하는 것을 잊어버려, 두 개의 도구가 동일한 Power Automate 웹훅을 가리키고 있었습니다. 그 결과 Claude는 자신 있게 "올바른" 도구를 호출했지만, Power Automate는 엉뚱한 짓을 저질렀습니다. 매우 교육적이었지만, 전혀 품위 있는 상황은 아니었습니다.
수정: (아마도 Power Automate Pro가 필요할 것입니다. 저는 다른 몇 가지 작업 때문에 이것이 필요했습니다.)
다음은 그 예시입니다. 저는 호출되기를 원하는 모든 다양한 도구들을 다루는 22개의 Power Automate 플로우 (flows)를 구축한 다음, 이를 MCP에 추가했습니다.
-
Power Automate에서 각 동작(action)마다 하나의 플로우를 만듭니다.
예시: 이메일 보내기, 받은 편지함 읽기, 캘린더 일정 생성, OneDrive 파일 쓰기 등. -
각 플로우를 “HTTP 요청이 수신될 때 (When an HTTP request is received)” 트리거로 시작합니다.
-
해당 플로우가 수락할 JSON 본문 (body)을 정의합니다.
이메일 보내기의 경우, 아마도{ "to": "...", "subject": "...", "body": "..." }형식이 될 것입니다. -
일반적인 M365 커넥터 (connector) 동작을 추가합니다.
예시: Outlook Send Email V2, OneDrive Create File, Excel Add Row, Planner Create Task. -
JSON을 반환하는 응답 (Response) 동작으로 플로우를 종료합니다.
-
HTTP 트리거 URL을 개인 설정 파일에 복사합니다.
커밋(commit)하지 마세요. 공개적인 곳에 붙여넣지 마세요. 비밀번호처럼 취급하십시오. -
해당 URL들 앞에 작은 FastMCP 서버를 배치합니다.
각 MCP 도구는 단순히 입력을 검증하고, 올바른 PA 웹후크 (webhook) URL을 찾아, 그곳으로 JSON을 POST로 전송한 뒤, PA 응답을 반환합니다.
래퍼 (wrapper)는 화려하지 않습니다. 기본적으로 다음과 같습니다:
AI 도구 호출 -> FastMCP 함수 -> httpx.post(PA 웹후크 URL, json=args) -> 응답 반환
제가 권장하는 주요 사항은 다음과 같습니다:
- 웹후크 URL을 비공개로 유지할 것
- 시작 시 중복 URL 체크 기능을 추가할 것
- 도구 이름과 상태를 로그로 남기되, 비밀 정보(secrets)는 남기지 말 것
- 보내기/쓰기 권한을 부여하기 전에 읽기 전용 도구부터 시작할 것
- 하나의 거대한 “무엇이든 수행하는” 엔드포인트 대신, 모든 플로우를 좁고 구체적으로 만들 것.
필요하다면 내일 아침에 더 많은 정보를 게시하겠습니다. 읽어주셔서 감사합니다!
[만약 Power Automate에 익숙하지 않거나 사용하기 불편하다면, 제가 (진심으로) 권장하는 방법은 co-work를 사용하거나 Chrome 확장 프로그램과 함께 Claude Code Terminal을 사용하여 이를 수행하도록 프롬프트를 입력하는 것입니다. 조금 느리고 시간이 걸리겠지만, 결국 만들어낼 것입니다. 다만, 작업이 빨리 끝나기를 원한다면 그냥 앉아서 구경만 하지는 마세요.]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기