خواندن واتساپ با ایجنت AI روی Cloudflare Workers؛ آموزش گامبهگام whatsapp-mcp
نویسنده: آرش لطیفی
با whatsapp-mcp ایجنتت میتواند پیامهای واتساپت را جستجو و بخواند؛ بدون سرور، روی Cloudflare Workers و Durable Object. نصب، محدودیتها و ریسکها.
TL;DR — پروژه whatsapp-mcp یک سرور MCP فقط-خواندنی است که در اکانت Cloudflare خودت اجرا میشود و پیامهای واتساپت را در D1/Durable Object نگه میدارد تا Claude Code یا هر کلاینت MCP بتواند جستجو و خلاصهشان کند — فقط حواست به پلن پولی Workers و خطر بن شدن باشد.
چه مشکلی را حل میکند؟
ایجنت AI که همهجا همراهت است، به پیامهای واتساپ دسترسی ندارد. راههای موجود یا WhatsApp Business API میخواهند (برای اکانت شخصی نه)، یا یک سرور همیشگی برای اجرای Baileys. این پروژه ( که ۲۲ اکتبر ۲۰۲۶ روی HN به ۱۵۷ امتیاز رسید) هر دو را دور میزند: همهچیز در Cloudflare خودت اجرا میشود و اکانت شخصیات را مثل WhatsApp Web لینک میکند.
مثال سؤالهایی که بعد از نصب میتوانی بپرسی:
- «دَنا درباره بلیطها چی گفت؟»
- «هر پیامی که کلمه اجاره توش بود، بین همه چتها پیدا کن.»
- «خلاصه چیزی که این هفته تو گروه فامیل جا موندم.»
چطور کار میکند؟
نکته جالب معماریش این است که گوشی منبع حقیقت میماند و سرور فقط یک «دستگاه لینکشده» است:
- سرور دائماً به واتساپ وصل نمیماند. وقتی ایجنت سؤال میپرسد (و یک بار در روز)، وصل میشود، هرچه واتساپ برایش صف کرده را میگیرد، در دیتابیس SQLite داخل یک Durable Object مینویسد و قطع میشود.
- پیامها در SQLite داخل Durable Object در اکانت Cloudflare خودت میمانند — «هیچجا جای دیگر نمیرود»، طبق README.
- ارسال پیام پشتیبانی نمیشود؛ فقط خواندن و جستجو.
روی HN بحث مفیدی هم شد: یکی از کاربران اشاره کرد این روش «طرف مقابل مکالمه» را هم بدون رضایتش در معرض یک مدل AI قرار میدهد — نکته درستی است که موقع استفاده از هر ابزار مشابه باید لحاظ کنی. کاربر دیگری تجربهBaileys و کتابخانههای مشابه را گفت: گاهی اکانت بن میشود، و اگر واتساپ کانال اصلی ارتباطت باشد آزاردهنده است.
نصب گامبهگام
پیشنیازها: اکانت Cloudflare روی پلن Workers Paid، نسخه Node 20 به بالا، و گوشیت.
Wrangler یک URL مثل https://whatsapp-mcp.your-name.workers.dev میدهد. صفحه اولش دو قدم باقیمانده را دارد:
- لینک واتساپ: QR را با واتساپ اسکن کن (Settings ← Linked Devices ← Link a Device). لینک اول تاریخچه را ایمپورت میکند.
- اتصال ایجنت: در Claude Code:
بعد /mcp را بزن و با رمز وارد شو. کلاینتهای دیگر هم همان URL /mcp را نشانه بروند.
جدول ابزارهایی که ایجنت در اختیار میگیرد
| ابزار | کار |
|---|---|
| list_chats | چتها، جدیدترین اول، با فیلتر اسم یا شماره |
| get_messages | خواندن یک چت، صفحهبندی بر اساس تاریخ |
| search_messages | جستجوی full-text روی همه چتها یا داخل یک چت |
| unnamed_chats | چتهای بیاسم، پرتردد اول، با آخرین پیام طرف |
| set_contact_names | ذخیره اسم برای شمارهها — به شماره میچسبد، در گروهها هم دیده میشود |
| sync_now / link_status / relink | سینک فوری، وضعیت اتصال، لینک مجدد با QR جدید |
هر ابزار خواندن اگر نسخه ذخیرهشده بیش از ده دقیقه قدیمی باشد، اول از واتساپ پرش میکند.
محدودیتهایی که باید بدانی
- چرا پلن پولی؟ ایمپورت تاریخچه بزرگ، داده زیادی را یکجا decode میکند و سقف CPU پیشفرض Workers کفاف نمیدهد.
wrangler.jsoncاین سقف را بالا میبرد و بالا بردنش پلن Paid میخواهد (چند دلار در ماه). روی پلن رایگان باید بلاکlimitsرا حذف کنی و انتظار ایمپورت شکننده داشته باشی. - غیررسمی و خلاف قوانین واتساپ. واتساپ API رسمی برای خواندن پیامهای شخصی ندارد؛ این پروژه از همان پروتکل WhatsApp Web با کتابخانه Baileys استفاده میکند. برای دستگاه لینکشدهی فقط-خواندنی ریسک عملی کم ولی صفر نیست. روی اکانت خودت استفاده کن و ارسال نکن.
- تاریخچه کامل تضمین نمیشود. واتساپ همانقدر به دستگاه جدید میدهد که خودش تصمیم بگیرد و فقط یک بار. برای ایمپورت دوباره باید relink کنی (پیامهای ذخیرهشده میمانند).
- مدیا دانلود نمیشود. عکس و ویس و فایل فقط به شکل لیبل
[image]یا[voice note 12s]با کپشن میآیند. - تککاربره. هر دیپلوی یک اکانت و یک owner — چون کل تاریخچه پیام و یک لاگین زنده داخلش است.
یک نکته هوشمندانه طراحی: چون واتساپ اسم همه مخاطبین را به دستگاه لینکشده نمیدهد، سرور خودش به سرویس کانتکت لاگین نمیکند؛ به ایجنت میسپارد. میگویی «اسم چتهای بیاسم را پیدا کن»، ایجنت unnamed_chats را میگیرد، با کانکتور کانتکتت (مثلاً Google Contacts) تطبیق میدهد و با set_contact_names ذخیره میکند. حتی نتیجه «چتی پیدا نشد» به ایجنت یادآوری میکند که این کار را انجام دهد.
چکلیست نصب
- [ ] اکانت Cloudflare روی Workers Paid و Node 20+ آماده است
- [ ] KV namespace ساختی و آیدیاش در
wrangler.jsoncگذاشتی - [ ]
OWNER_PASSWORDرا با حداقل ۱۲ کاراکتر ست کردی - [ ] QR اسکن شد و ایمپورت تاریخچه کامل شد
- [ ]
claude mcp add --transport http whatsapp https://your-url/mcpاجرا شد و/mcpبا رمز لاگین شد - [ ] چتهای مهم بیاسم را با
set_contact_namesنامگذاری کردی - [ ] میدانی که ریسک بن (هرچند کم) وجود دارد و از اکانت اصلی کاری استفاده نمیکنی