공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/이것저것_개발일지

Kakao 메시지 API + MCP Server로 '나에게 메시지 보내기' 기능 만들기

inspirit941 2025. 5. 11. 17:17
반응형

 

 

 

 

개발 결과. 자세한 사용법은 아래 링크의 README를 참고하면 된다.

https://github.com/inspirit941/kakao-bot-mcp-server

 

GitHub - inspirit941/kakao-bot-mcp-server: MCP Server Implementation on Kakao Developers API to connect an AI Agent

MCP Server Implementation on Kakao Developers API to connect an AI Agent - inspirit941/kakao-bot-mcp-server

github.com

 

 

 

최근 라인에서 AI Agent가 라인 메시지 API를 호출할 수 있도록 해주는 MCP Server를 공개했다.

공개된 레포를 살펴보면서, AI Agent에 메신저 기능이 결합되면 앞으로도 굉장히 유용하겠다는 생각이 들었다. 단순한 질의응답을 넘어 AI가 실제 서비스 API를 호출해서 작업을 수행하고, 그 결과를 메신저로 전달할 수 있게 된 것이다. 예를 들어, “종로 근처 한식 맛집을 네이버에서 10개 찾아서 요약하고, 내 카톡으로 보내줘” 같은 요청이 자연스럽게 가능해지는 셈이다. 찾아보니 github에는 이미 Naver MCP Server, 카카오 맵 / 다음 검색 MCP Server 등 국내 서비스 API를 MCP에 래핑한 사례가 보였다.

 

혹시 카카오 메시지 API를 MCP에 맞춰 구현한 사례가 있는지 찾아봤다. 하지만 대부분 카카오 지도나 다음 검색 API 위주였고, 메시지 API를 다룬 구현체는 없었다. 그래서 “그렇다면 내가 한번 만들어보자”는 마음으로 직접 개발에 착수하게 되었다.

 


카카오 Developers API는 개인 개발자가 쓰기 힘든 구조다

 

카카오 Developers API의 메시지 API를 확인해보니, 이게 왜 지금까지 안 나왔는지 이해가 됐다. 카카오 API는 개인 개발자가 쓰기엔 어렵고 불편한 절차를 거치도록 만들어뒀다. '개인적인 용도로는 카카오 API를 안 썼으면 좋겠다'는 의도가 느껴질 만큼, 개인 개발 또는 테스트 용도로 쓰기 위한 절차나 API 권한 설정을 까다롭게 만들어놓았다. 

 

  • 어지간한 API를 쓰려면 '비즈 앱 신청'을 해야 하며, 사업자등록번호와 실 서비스중인 URL을 요구한다
  • 개인 개발자라면 당장은 사업자등록번호 없이도 일단 비즈 앱 등록이 가능하지만,
    카톡 메시지 / 친구목록 API, 톡캘린더 API 등을 사용 신청하려면 실제로 운영중인 서비스 URL을 등록하고 심사를 받아야 한다.
  • 테스트용 앱을 생성할 수 있는데, 테스트용 앱은 API사용 신청 자체가 안 된다. 따라서 테스트 앱에서도 API 테스트를 못 한다.

 

메시지 API를 제공하는 대부분의 서비스들 (Line, Discord, Slack, Telegram, etc…) 중 ‘사업자등록번호’를 빌미로 개인 개발자가 테스트조차 쉽게 해볼 수 없도록 제한하는 건 카카오밖에 본 적이 없다. 보통은 개인 개발자 계정으로도 API Key를 발급해주고 사용할 수 있게 하되 Free Quota나 Rate limit를 강제해서 테스트로만 사용할 수 있도록 제약하는데, 카카오는 굉장히 폐쇄적이었다. 이 제약 때문에 메시지 API는 사업자등록번호 없이도 쓸 수 있는 ‘나에게 보내기’만 테스트해볼 수 있었고, 톡캘린더 API는 테스트할 수 없었다.



다음으로 불편한 건, 메시지 API를 호출하려면 개발자 콘솔에서 발급받은 API KEY가 아니라 카카오 OAuth2 로그인으로 발급받은 bearer token만을 써야 한다는 점이다. 즉 사용자가 자신의 카카오 계정으로 나의 애플리케이션에 반드시 로그인하고, 메시지 API 호출 권한을 허용한 뒤 발급받는 bearer token만을 사용해야 한다. 이 토큰은 만료기한이 있기 때문에, 주기적으로 토큰을 갱신하는 로직까지도 포함되어야 했다.




MCP Server 구현하기

카카오톡 메시지 API를 사용하려면 OAuth2로 로그인한 뒤, 발급받은 bearer access token을 사용해야 한다.
따라서 MCP Server는 OAuth2 로그인 기능을 구현하고, 로그인으로 발급받은 토큰을 재사용할 수 있도록 어딘가에 저장해둬야 한다.

 

문제는, 내가 MCP Server를 개발하려던 시점에서는 MCP의 OAuth 인증 기능이 안정화되지 않았다는 점이다. 

결정적으로, MCP의 OAuth2 인증 기능에서는 ‘토큰 관리’를 Limitation으로 명시해뒀다.

 

한 번 인증받은 사용자 정보를 어떤 형태로든 재사용해야 하는데,

발급받은 토큰을 어디 저장할 것이며 만료되면 어떻게 재발급받을 수 있는지는 별다른 안내가 없었다.

 

결국 토큰을 발급받고 관리하는 기능은 직접 구현해야 한다는 뜻이다.



 

 

구현은 Google Gmail과 Calendar 기능을 지원하는 https://github.com/MarkusPfundstein/mcp-gsuite 구현체를 참고했다.

 

 

GitHub - MarkusPfundstein/mcp-gsuite: MCP Server to interact with Google Gsuite prodcuts

MCP Server to interact with Google Gsuite prodcuts - MarkusPfundstein/mcp-gsuite

github.com

 

 

 

구글 로그인 기능을 위한 인증서버 / 토큰관리를 어떻게 해결했는지 확인할 수 있었는데

 

이 구조를 카카오 로그인 기능에도 그대로 적용했다.  MCP tool로 메시지 API를 호출하면

 



카카오 로그인의 경우, OAuth 인증을 거쳐 발급받은 access_token의 만료기한을 지정할 수 없다. 따라서 로컬에서 만료된 토큰을 refresh_token 활용해서 재발급받고, 로컬에 저장하는 로직이 필요하다.


인증 로직을 완성했다면, 카카오 API 호출하는 로직을 MCP tool로 정의한다.



이렇게 하면, 예컨대 MCP를 지원하는 claude desktop에서 ‘나에게 카카오톡 메시지 보내기’ 기능을 사용할 수 있게 된다.

 

 

반응형