내 WhatsApp 메시지를 읽기 전용으로 검색하는 MCP 서버 공개
Cloudflare Workers 위에서 도는 읽기 전용 MCP 서버가 공개됐다. 깃허브 finereli/whatsapp-mcp는 사용자가 자기 WhatsApp 계정을 한 번 연결하면 Claude Code나 Claude Desktop 같은 MCP 클라이언트가 대화를 검색하고 읽을 수 있게 해준다. 메시지를 보내는 경로는 아예 없다. 서버는 사용자의 Cloudflare 계정 안에서 돌고, 대화 기록은 그 계정의 SQLite에만 남는다.
제공되는 도구는 실용적인 것들로 짜여 있다. 최근 순으로 채팅 목록을 훑고, 특정 대화를 날짜 기준으로 앞뒤로 넘기며 읽고, 전체 또는 한 대화 안에서 전문 검색을 수행한다. 이름이 붙지 않은 채팅은 상대가 마지막으로 남긴 말과 함께 빈도순으로 보여준다. 전화번호에 이름을 저장하는 기능도 있는데, 이름이 번호에 귀속되므로 그룹 대화에서도 그대로 나타난다.
연결 방식이 눈에 띈다. 이 서버는 WhatsApp에 상시 붙어 있지 않다. 에이전트가 무언가를 요청할 때, 그리고 하루 한 번만 접속해 그동안 WhatsApp이 쌓아둔 메시지를 받아 자체 데이터베이스에 적고는 연결을 끊는다. 휴대폰은 평소처럼 알림을 받으며 동작한다. 저장된 사본이 10분 넘게 오래된 상태라면 읽기 도구가 먼저 최신 내용을 당겨오는 식이다.
구조는 Durable Object 하나에 모여 있다. 인증 키와 메시지, 채팅, 연락처, FTS5 인덱스가 모두 그 안의 SQLite에 들어가고, Baileys 소켓은 페어링이나 수집 세션이 도는 동안에만 열린다. Worker 자체는 상태를 갖지 않으며 OAuth 토큰을 담는 KV 네임스페이스만 별도로 쓴다. Baileys를 workerd에서 돌리기 위한 shim과 Rust 브리지에서 wasm을 뽑아내는 스크립트도 저장소에 함께 들어 있다.
설치는 wrangler 명령 몇 줄이면 끝난다. KV 네임스페이스를 만들고, 휴대폰 연결 페이지에 쓸 12자 이상의 비밀번호를 시크릿으로 넣으면 배포 URL이 출력된다. 그 페이지에서 WhatsApp의 연결된 기기 메뉴로 QR을 스캔하면 첫 이력 가져오기가 시작된다. 이후 claude mcp add --transport http whatsapp <배포URL>/mcp 로 에이전트를 붙이고 비밀번호로 로그인하면 된다.
이런 시도가 나온 배경에는 API의 공백이 있다. WhatsApp은 개인 계정의 메시지를 읽는 공식 수단을 제공하지 않는다. 이 프로젝트는 WhatsApp Web이 쓰는 프로토콜을 오픈소스 라이브러리 Baileys로 구현해 그 자리를 우회한다. 동시에 MCP가 에이전트와 데이터를 잇는 인터페이스로 자리를 잡으면서, 자기 데이터를 자기 인프라에 둔 채 에이전트에 노출하려는 수요와 맞물린다.
개발자에게 이 저장소가 주는 힌트는 개인 데이터용 에이전트 백엔드의 한 가지 전형을 보여준다는 점이다. 데이터를 외부 서비스로 넘기지 않고 사용자 계정 안의 Durable Object에 가둔 다음, MCP라는 얇은 계층만 에이전트에 노출한다. 연락처 조회처럼 별도 권한이 필요한 작업은 서버가 직접 처리하지 않고, 이미 연락처 도구를 갖고 있는 에이전트 쪽으로 넘긴다. OAuth와 소유자 비밀번호로 접근 범위를 좁히는 구성도 참고할 만하다.
전제와 한계도 분명하다. 우선 공식 제품이 아니며 WhatsApp 이용약관에 어긋난다. 읽기만 하는 연결된 기기라 실질 위험은 낮지만 0은 아니라고 저장소는 적고 있다. 첫 연결 때 WhatsApp이 새 기기에 넘겨주는 만큼만 이력이 들어오므로 전부가 아닐 수 있고, 다시 가져오려면 재연결을 해야 한다. 사진과 음성, 문서는 내려받지 않고 [image]나 [voice note 12s] 같은 라벨과 캡션만 남으며 전사도 없다. 큰 이력을 한 번에 디코딩하려면 Workers의 기본 CPU 한도를 올려야 해서 유료 플랜이 필요하고, 배포 하나가 계정 하나와 소유자 하나를 전제로 설계됐다.