
whatsapp-mcp কী করে
whatsapp-mcp একটি ছোট সার্ভার, যা MCP-সামঞ্জস্যপূর্ণ AI এজেন্টকে আপনার WhatsApp বার্তা পড়তে ও খুঁজতে দেয়। এটি আপনার নিজের Cloudflare অ্যাকাউন্টে চলে এবং WhatsApp Web-এর মতো একটি লিঙ্ক করা ডিভাইস হিসেবে আপনার ফোনের সঙ্গে সংযুক্ত হয়।
প্রাথমিক সেটআপের পর Claude Code, Claude Desktop বা অন্যান্য MCP অ্যাপ্লিকেশনের মতো ক্লায়েন্টগুলো এমন প্রশ্নের উত্তর দিতে পারে:
- ফ্লাইট সম্পর্কে Dana কী বলেছিল?
- সব চ্যাটে লিজের উল্লেখ থাকা প্রতিটি বার্তা খুঁজে বের করো।
- এই সপ্তাহে পরিবারের গ্রুপে আমি কী কী মিস করেছি, তার সারসংক্ষেপ দাও।
সার্ভারটি ইচ্ছাকৃতভাবে শুধু-পাঠযোগ্য: এটি বার্তা সংগ্রহ, অনুসন্ধান ও প্রদর্শন করতে পারে, কিন্তু WhatsApp বার্তা পাঠাতে পারে না।
সিস্টেমটি যেভাবে কাজ করে
আপনার ফোনই তথ্যের মূল উৎস থাকে। Cloudflare ডিপ্লয়মেন্টটি একটি লিঙ্ক করা ডিভাইস হিসেবে কাজ করে এবং ডেটা সিঙ্ক্রোনাইজ করার প্রয়োজন হলে বা অ্যাকাউন্ট পেয়ার করার সময়ই WhatsApp-এর সঙ্গে সংযুক্ত হয়।
কোনো এজেন্ট তথ্য চাইলে, সার্ভারে সংরক্ষিত কপিটি দশ মিনিটের বেশি পুরোনো হলে সার্ভার WhatsApp থেকে অপেক্ষমাণ আপডেট সংগ্রহ করে। প্রতিদিন একবার নির্ধারিত একটি পুলও চলে। বার্তা সংগ্রহের পর সার্ভার আবার সংযোগ বিচ্ছিন্ন করে। আপনার ফোন স্বাভাবিকভাবে কাজ করতে থাকে এবং বিজ্ঞপ্তি পেতে থাকে।
বার্তাগুলো আপনার অ্যাকাউন্টের একটি Cloudflare Durable Object-এর ভেতরের SQLite ডেটাবেসে সংরক্ষিত হয়। সার্ভার আপনার বার্তার ইতিহাস কোনো বাহ্যিক স্টোরেজ সার্ভিসে পাঠায় না।
পূর্বশর্ত
ইনস্টল করার আগে নিচের বিষয়গুলো প্রস্তুত করুন:
- Workers Paid প্ল্যানে একটি Cloudflare অ্যাকাউন্ট।
- Node.js 20 বা পরবর্তী সংস্করণ।
- যে WhatsApp অ্যাকাউন্টটি লিঙ্ক করতে চান, সেটি থাকা একটি ফোন।
- Claude Code বা Claude Desktop-এর মতো একটি MCP ক্লায়েন্ট।
পেইড Workers প্ল্যান গুরুত্বপূর্ণ, কারণ বড় WhatsApp ইতিহাস ইমপোর্ট করলে ডিফল্ট CPU সীমা অতিক্রম করতে পারে। রিপোজিটরিটি wrangler.jsonc-এ সেই সীমা বাড়ায়, আর বেশি সীমার জন্য Cloudflare পেইড প্ল্যান আবশ্যক করে।
ইনস্টল ও ডিপ্লয় করুন
রিপোজিটরি ক্লোন করুন, নির্ভরতা ইনস্টল করুন, প্রয়োজনীয় KV namespace তৈরি করুন, মালিকের পাসওয়ার্ড সংরক্ষণ করুন এবং Worker ডিপ্লয় করুন:
git clone https://github.com/finereli/whatsapp-mcp
cd whatsapp-mcp
npm install
npx wrangler kv namespace create OAUTH_KV
npx wrangler secret put OWNER_PASSWORD
npm run deployপাসওয়ার্ডটি কমপক্ষে 12 অক্ষরের হতে হবে। ডিপ্লয়মেন্ট শেষ হলে Wrangler https://whatsapp-mcp.your-name.workers.dev-এর মতো একটি URL দেখাবে। সেটআপ চালিয়ে যেতে ওই URL খুলুন।
কাস্টম ডোমেইন ব্যবহার করতে চাইলে wrangler.jsonc-এর নিচের দিকের মন্তব্যগুলো অনুসরণ করুন।
আপনার WhatsApp অ্যাকাউন্ট লিঙ্ক করুন
ডিপ্লয়মেন্ট পৃষ্ঠায় বাকি সেটআপের ধাপগুলো দেওয়া আছে।
- WhatsApp লিঙ্ক করার বিকল্পটি বেছে নিন।
- আপনার ফোনে WhatsApp খুলে Settings, Linked Devices এবং Link a Device-এ যান।
- সার্ভার দেখানো QR কোড স্ক্যান করুন। একই ফোন ব্যবহার করায় যদি তার স্ক্রিন স্ক্যান করতে না পারেন, তাহলে ফোন-নম্বর পেয়ারিংয়ের বিকল্পটি ব্যবহার করুন।
- প্রথমবার লিঙ্ক করার সময় WhatsApp নতুন ডিভাইসের জন্য যে ইতিহাস উপলভ্য করে, সেটি ইমপোর্ট হওয়া পর্যন্ত অপেক্ষা করুন।
পৃষ্ঠায় ইমপোর্টের অগ্রগতি দেখা যায় এবং প্রক্রিয়া চলাকালীন আপনি পৃষ্ঠাটি বন্ধ করতে পারেন। প্রাথমিক ইমপোর্টে সব পুরোনো বার্তা নাও থাকতে পারে, কারণ নতুন লিঙ্ক করা ডিভাইসকে কোন ইতিহাস দেওয়া হবে তা WhatsApp নির্ধারণ করে।
একটি MCP ক্লায়েন্ট সংযুক্ত করুন
Claude Code-এ /mcp এন্ডপয়েন্ট ব্যবহার করে ডিপ্লয় করা সার্ভারটি নিবন্ধন করুন:
claude mcp add --transport http whatsapp https://your-url/mcpএরপর Claude Code-এ /mcp চালিয়ে মালিকের পাসওয়ার্ড দিয়ে সাইন ইন করুন। অন্যান্য MCP ক্লায়েন্টে একই URL দিয়ে কনফিগার করতে হবে:
https://your-url/mcpঅনুমোদন সম্পন্ন হলে এজেন্টকে চ্যাটের তালিকা, বার্তা সংগ্রহ বা আপনার ইতিহাস অনুসন্ধান করতে বলুন।
উপলভ্য টুলগুলো ব্যবহার করুন
MCP সার্ভারটি স্থানীয় বার্তার কপি পড়া ও রক্ষণাবেক্ষণের জন্য নির্দিষ্ট কিছু টুল প্রদান করে:
list_chatsচ্যাটের তালিকা দেখায়, সর্বশেষটি আগে, এবং নাম বা নম্বর দিয়ে ঐচ্ছিক ফিল্টার সমর্থন করে।get_messagesএকটি চ্যাটের বার্তা পড়ে এবং তারিখ অনুযায়ী পেছনে বা সামনে পেজিং সমর্থন করে।search_messagesসব চ্যাটে বা নির্বাচিত কোনো একটি চ্যাটের মধ্যে পূর্ণ-পাঠ অনুসন্ধান চালায়।unnamed_chatsশুধু ফোন নম্বর দিয়ে পরিচিত চ্যাট খুঁজে বের করে, সবচেয়ে সক্রিয় চ্যাটগুলোকে অগ্রাধিকার দেয় এবং অন্য ব্যক্তির সর্বশেষ বার্তা দেখায়।set_contact_namesফোন নম্বরের জন্য নাম সংরক্ষণ করে, যাতে গ্রুপ চ্যাটেও সেগুলো সঠিকভাবে দেখা যায়।sync_nowসঙ্গে সঙ্গে নতুন বার্তা সংগ্রহ করে।link_statusঅ্যাকাউন্টটি লিঙ্ক করা আছে কি না, সর্বশেষ কখন সিঙ্ক হয়েছে এবং কতটা ডেটা সংরক্ষিত আছে তা জানায়।relinkবর্তমান লিঙ্ক সরিয়ে আবার পেয়ারিং প্রক্রিয়া শুরু করে। সংরক্ষিত বার্তা উপলভ্য থাকে।
সংরক্ষিত কপিটি দশ মিনিটের বেশি পুরোনো হলে পড়ার টুলগুলো স্বয়ংক্রিয়ভাবে প্রথমে সিঙ্ক করে। তাই প্রতিটি অনুসন্ধানের জন্য ম্যানুয়ালি sync_now কল না করেও স্বাভাবিক ভাষায় অনুরোধ করা যায়।
শুধু ফোন নম্বর হিসেবে দেখা চ্যাটের পরিচয় নির্ধারণ করুন
কিছু চ্যাট ফোন নম্বর হিসেবে দেখা যায়, কারণ WhatsApp প্রতিটি লিঙ্ক করা ডিভাইসকে কোনো পরিচিতির নাম দেয় না। একবারের কথোপকথন বা আপনার WhatsApp পরিচিতিতে সংরক্ষিত নয় এমন ব্যক্তিদের ক্ষেত্রে এটি সাধারণ।
এজেন্টকে বলুন:
Find names for my unnamed chats.এজেন্ট unnamed_chats কল করতে পারে, আগে থেকেই থাকা কোনো contacts integration-এর সঙ্গে নম্বর মিলিয়ে দেখতে পারে এবং set_contact_names-এর মাধ্যমে মিল পাওয়া নামগুলো জমা দিতে পারে। উদাহরণস্বরূপ, Google Contacts বা Gmail connector মিল থাকা নাম দিতে পারে। সার্ভার নিজে কোনো contacts service-এ লগ ইন করে না।
সংরক্ষিত নামগুলো ফোন নম্বরের সঙ্গে যুক্ত থাকে, তাই সেগুলো গ্রুপ কথোপকথনেও ব্যবহার করা যায়। কোনো মিল থাকা পরিচিতি না থাকলে কিছু নম্বর নামহীনই থাকবে।
মিডিয়া ও বার্তার ইতিহাস বুঝুন
মিডিয়া ফাইল ডাউনলোড করা হয় না। ছবি, ভয়েস নোট এবং নথিগুলো [image] বা [voice note 12s]-এর মতো লেবেল দিয়ে দেখানো হয়। WhatsApp সরবরাহ করলে ক্যাপশন সংরক্ষণ করা হয়, তবে ভয়েস বার্তার ট্রান্সক্রিপশন করা হয় না।
প্রথম লিংকটি WhatsApp যে ইতিহাস পাঠানোর সিদ্ধান্ত নেয়, সেটিই আমদানি করে। সাধারণত প্রতিটি লিংকের মাধ্যমে ইতিহাস একবার পাঠানো হয়। আমদানি অসম্পূর্ণ হলে, ইতিমধ্যে সংরক্ষিত বার্তাগুলো রেখে পুনরায় লিংক করলে আরেকটি আমদানির অনুরোধ করা যায়। ইনজেস্ট প্রক্রিয়াটি idempotent হিসেবে তৈরি, তাই পুনরায় আমদানি করলে ইচ্ছাকৃতভাবে একই সারি একাধিকবার তৈরি হয় না।
অ্যাকাউন্ট পুনরায় লিংক করুন
WhatsApp জানালে যে ডিভাইসটি সরিয়ে দেওয়া হয়েছে, অথবা আপনি আবার পেয়ারিং প্রক্রিয়া শুরু করতে চাইলে পুনরায় লিংক করুন। আপনার এজেন্টকে relink চালাতে বলুন, অথবা /setup খুলে আনলিংক করে আবার স্ক্যান করুন নির্বাচন করুন।
অনুরোধ করা হলে নতুন QR কোড স্ক্যান করুন। আগে সংরক্ষিত বার্তাগুলো রাখা হবে, আর নতুন লিংকটি অনুপস্থিত ইতিহাস পূরণ করতে পারবে।
উন্নত কনফিগারেশন
ডিফল্ট ডিপ্লয়মেন্টে পাসওয়ার্ড প্রমাণীকরণ ব্যবহার করা হয়। প্রধান কনফিগারেশন মানগুলো হলো:
OWNER_PASSWORD: মালিকের পাসওয়ার্ড; ন্যূনতম দৈর্ঘ্য 12 অক্ষর।OWNER_EMAIL: login-service মোড ব্যবহারের সময় অনুমোদিত একমাত্র ইমেল ঠিকানা।OPERATOR_NAME: গোপনীয়তা পৃষ্ঠায় দেখানো একটি ঐচ্ছিক নাম।DEFAULT_COUNTRY_CODE: কোনো এজেন্ট কান্ট্রি কোড ছাড়া নম্বর সংরক্ষণ করলে ব্যবহৃত শুধু-অঙ্কের কান্ট্রি কোড।LOGIN_ORIGIN: ডিপ্লয়মেন্টকে login-service মোডে পরিবর্তন করে।ALLOWED_ORIGINS: login-service টোকেনের জন্য গ্রহণযোগ্য origin-গুলো।PIN: ঐচ্ছিক 32-অক্ষর বা তার বেশি দৈর্ঘ্যের মান, যাx-pinহেডারের মাধ্যমে সুরক্ষিত ডিবাগ রুট সক্রিয় করে।OAUTH_KVএবংWA: অ্যাপ্লিকেশন ব্যবহৃত KV ও Durable Object binding।
ডোমেইন, KV ID এবং ইমেলের মতো ডিপ্লয়মেন্ট-নির্দিষ্ট মানগুলো gitignored wrangler.local.jsonc ফাইলে রাখুন। স্থানীয় কনফিগারেশন দিয়ে ডিপ্লয় করুন:
npm run deploy:localসিঙ্ক্রোনাইজেশন সমস্যা ডিবাগ করুন
আপনি PIN কনফিগার করলে সার্ভার সুরক্ষিত ডায়াগনস্টিক endpoint সরবরাহ করে। x-pin হেডারে PIN পাঠান:
/debugসেশন ধাপ, লিংকের অবস্থা, গণনা এবং সাম্প্রতিক সেশন ইভেন্ট দেখায়।/debug/pullসঙ্গে সঙ্গে একটি সিঙ্ক্রোনাইজেশন শুরু করে।/debug/chats?q=,/debug/messages?chat=,/debug/search?q=এবং/debug/typesসংরক্ষিত ডেটা পরিদর্শন করে।/debug/unnamedunnamed_chatsথেকে ফেরত আসা চ্যাটগুলো দেখায়।/debug/sql?q=স্টোরের বিরুদ্ধে একটি read-onlySELECTকোয়েরি চালায়।/debug/logoutপুনরায় লিংক করার সমতুল্য কাজ সম্পাদন করে।
সফল ডিপ্লয়মেন্টের পর কার্যকর যাচাইকরণ ধাপ হলো /debug-এ সেশনটি idle এবং অ্যাকাউন্টটি linked দেখাচ্ছে কি না পরীক্ষা করা, /debug/pull চালানো, তারপর চ্যাট তালিকা, বার্তা সংগ্রহ, পূর্ণ-পাঠ্য অনুসন্ধান, নামহীন চ্যাট পরিচালনা এবং পরিচিতির নাম পরীক্ষা করা।
স্থানীয়ভাবে ডেভেলপ করুন
স্থানীয় ডেভেলপমেন্টের জন্য পর্যাপ্ত দীর্ঘ একটি পাসওয়ার্ডসহ .dev.vars ফাইল তৈরি করে Worker চালান:
OWNER_PASSWORD=your-12-character-or-longer-password
npm run devস্থানীয় ডেভেলপমেন্টে খালি স্টোরেজসহ একটি আলাদা Durable Object ব্যবহার করা হয়। এটি সাইন-ইন প্রবাহ পরীক্ষা করতে এবং একটি বাস্তব QR কোড দেখাতে পারে, তবে ফোন স্থানীয়ভাবে লিংক করলে আরেকটি linked device তৈরি হয়।
কোড পরিবর্তন জমা দেওয়ার আগে চালান:
npm run typecheck
npm testটেস্ট স্যুটটি Node 22.13 বা পরবর্তী সংস্করণে Node-এর বিল্ট-ইন SQLite-এর বিরুদ্ধে স্টোর কোড চালায়। ওই SQLite পরিবেশে পূর্ণ-পাঠ্য অনুসন্ধান কভার করা হয় না, তাই ডিপ্লয়মেন্টের পর অনুসন্ধানও পরীক্ষা করুন।
গুরুত্বপূর্ণ নিরাপত্তা ও প্ল্যাটফর্ম বিবেচনা
এই প্রকল্পটি কোনো অফিসিয়াল WhatsApp ইন্টিগ্রেশন নয়। ব্যক্তিগত বার্তা পড়ার জন্য WhatsApp কোনো API সরবরাহ করে না, এবং এই প্রকল্পটি ওপেন-সোর্স Baileys লাইব্রেরির মাধ্যমে WhatsApp Web-এর একই প্রোটোকল ব্যবহার করে। এই ব্যবহার WhatsApp-এর শর্ত লঙ্ঘন করতে পারে। এটি কেবল নিজের অ্যাকাউন্টে ব্যবহার করুন, এবং মনে রাখবেন যে read-only linked device-এর ক্ষেত্রে বাস্তব ঝুঁকি কম হলেও শূন্য নয়।
একটি ডিপ্লয়মেন্ট একজন ব্যক্তি ও একটি WhatsApp অ্যাকাউন্টের জন্য নির্ধারিত। প্রতিটি ডিপ্লয়মেন্টে সম্পূর্ণ বার্তার ইতিহাস এবং একটি সক্রিয় অ্যাকাউন্ট লগইন সংরক্ষিত থাকে, তাই একটি ডিপ্লয়মেন্ট ভাগাভাগি না করে ব্যবহারকারীদের আলাদা ডিপ্লয়মেন্ট চালানো উচিত।
বার্তাগুলো Durable Object-এর SQLite স্টোরেজের ভেতরেই থাকে, তবে কেউ ডিপ্লয়মেন্টের শংসাপত্র বা মালিকের প্রমাণীকরণে প্রবেশাধিকার পেলে সংরক্ষিত ইতিহাসে প্রবেশ করতে পারে। পাসওয়ার্ড, Cloudflare অ্যাকাউন্ট, secrets এবং যেকোনো debug PIN সতর্কতার সঙ্গে সুরক্ষিত রাখুন।
উপসংহার
whatsapp-mcp WhatsApp-এর linked-device প্রোটোকল এবং MCP ক্লায়েন্টের মধ্যে একটি ব্যবহারিক সেতু তৈরি করে। এটি Cloudflare-এ ডিপ্লয় করুন, একবার ফোন লিংক করুন, /mcp-এ একটি এজেন্ট সংযুক্ত করুন, এবং নিজের বার্তার আর্কাইভ অনুসন্ধান করতে search_messages, get_messages ও set_contact_names-এর মতো টুল ব্যবহার করুন। এর read-only নকশা, ব্যক্তিগত Durable Object স্টোরেজ, নির্ধারিত সিঙ্ক্রোনাইজেশন এবং স্পষ্ট পুনরায় লিংক প্রক্রিয়া এটিকে ব্যক্তিগত বার্তা অনুসন্ধানের জন্য উপযোগী করে, একই সঙ্গে ডিপ্লয়মেন্টের নিয়ন্ত্রণ আপনার হাতেই রাখে।
