# শুধুমাত্র-পঠন MCP

Canonical page: https://phishdestroy.github.io/TgWitness/bn/docs/reference/mcp/

নির্বাচিত ওয়ার্কস্পেস এবং চ্যাটে মেয়াদোত্তীর্ণ, প্রত্যাহারযোগ্য অ্যাক্সেস সহ একটি MCP ক্লায়েন্ট সংযুক্ত করুন।

একটি অ্যানালিস্ট ক্লায়েন্টকে নির্বাচিত ওয়ার্কস্পেস এবং চ্যাটগুলোর সাথে সংযুক্ত করুন। TgWitness **প্যানেল প্রসেসের `/mcp`-এ Streamable HTTP** সার্ভ করে। প্রতিটি সংযোগের নিজস্ব টোকেন, মেয়াদ শেষ হওয়ার সময় এবং অনুমোদিত টুলস থাকে। MCP কোনো Telegram মেসেজ পাঠাতে, সেটিংস পরিবর্তন করতে বা স্বাক্ষরিত জার্নাল মডিফাই করতে পারে না।

[ওয়ার্কফ্লো গাইড](https://phishdestroy.github.io/TgWitness/docs/archive/) · [উইকি](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Archive-and-Integrations.md)

## ইনস্টল এবং যাচাই

প্যানেলটি যে Python এনভায়রনমেন্টে চলে সেটি ব্যবহার করুন। সোর্স চেকআউট থেকে:

```
# Windows PowerShell
& .\.venv\Scripts\python.exe -m pip install -c deploy/constraints-mcp.txt -e '.[mcp]'
& .\.venv\Scripts\python.exe start.py --check
```

```
# Linux / macOS
.venv/bin/python -m pip install -c deploy/constraints-mcp.txt -e '.[mcp]'
.venv/bin/python start.py --check
```

ইনস্টলেশনের পর প্যানেলটি তার স্বাভাবিক ডেটা ডিরেক্টরি এবং লঞ্চ আর্গুমেন্টসহ রিস্টার্ট করুন। রেডিনেস স্ট্যাটাসে `[PASS] mcp: streamable-http available` থাকা উচিত। **Integrations → MCP** রানটাইম স্ট্যাটাস এবং সেই সার্ভারের প্রকৃত Python এক্সিকিউটেবল ব্যবহার করে একটি ইনস্টলেশন কমান্ড দেখায়। **Re-check** পেজ রিলোড না করেই এই স্ট্যাটাস রিফ্রেশ করে; এটি কোনো প্যাকেজ ইনস্টল করে না বা সার্ভার রিস্টার্ট করে না।

MCP এক্সট্রা অফিশিয়াল [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk) ব্যবহার করে। `deploy/constraints-mcp.txt` পরীক্ষিত SDK এবং ডিপেন্ডেন্সিগুলো পিন করে রাখে। এই ফিচারগুলোর জন্য বর্তমান সোর্স কোড প্রয়োজন; 0.7.0 পোর্টেবল প্রিভিউটি এগুলোর আগের সংস্করণ।

## একটি সংযোগ তৈরি করুন

1. একটি লেবেল দিন এবং ক্লায়েন্ট যেসব ওয়ার্কস্পেস ও চ্যাট পড়তে পারবে সেগুলো নির্বাচন করুন।
2. টুলগুলো আলাদাভাবে নির্বাচন করুন অথবা একটি প্রিসেট ব্যবহার করুন। শুধুমাত্র ইমপ্লিমেন্ট করা টুলগুলোই অফার করা হয়।
3. ১, ৭, ৩০ বা ৯০ দিন, অথবা এক মিনিট থেকে ৯০ দিনের মধ্যে একটি কাস্টম মেয়াদ নির্বাচন করুন।
4. **Create connection** চাপুন। ক্লায়েন্ট কনফিগারেশনের পাশে টোকেনটি একবারের জন্য দেখা যাবে।
5. টোকেন এবং কনফিগ কপি করুন, তারপর **Check connection** রান করুন। এটি MCP ইনিশিয়ালাইজ করে এবং অনুমোদিত টুলগুলোর তালিকা দেখায়; **এতে কোনো মেসেজ পড়া হয় না**। ফলাফলে প্রোটোকল ভার্সন, টুলগুলোর নাম, সংখ্যা এবং অতিবাহিত সময় দেখানো হয়।
6. ক্রেডেনশিয়াল সেভ করা হয়ে গেলে **Done** চাপুন। পোলিং করার সময় ফর্ম এবং একবার দেখানো কার্ডটি অক্ষুণ্ণ থাকে। প্যানেল লক করলে প্রদর্শিত সিক্রেটগুলো মুছে যায়।

তালিকায় সাম্প্রতিক ব্যবহার, সর্বশেষ ব্যবহৃত টুল, অ্যাড্রেস এবং শেষ এক মিনিটের রিকোয়েস্ট সংখ্যা দেখানো হয়। **Revoke** অ্যাক্সেস বন্ধ করে দেয়। **Rotate token** পুরনো ক্রেডেনশিয়াল বাতিল করে এবং একই স্কোপ, টুল ও মেয়াদসহ একটি নতুন টোকেন ইস্যু করে; নতুন টোকেনটি একবারই কপি করে রাখুন। প্যানেল লগইন টোকেন এবং Telegram ক্রেডেনশিয়াল MCP টোকেন হিসেবে কাজ করে না।

## আপনার ক্লায়েন্ট সংযুক্ত করুন

প্যানেলে ক্লায়েন্ট নির্বাচন করুন এবং জেনারেট হওয়া কনফিগারেশনটি কপি করুন। কনফিগগুলোতে সিক্রেট রেফারেন্স বা স্পষ্ট প্লেসহোল্ডার ব্যবহার করা হয়; টোকেনটি আলাদাভাবে কপি করতে হয়।

| ক্লায়েন্ট | কনফিগারেশন | সংযোগ |
| --- | --- | --- |
| Claude Code | `.mcp.json` | HTTP, `type: "http"`, বেয়ারার হেডার |
| Claude Desktop | `claude_desktop_config.json` | লোকাল stdio ব্রিজ |
| Cursor | `.cursor/mcp.json` | এনভায়রনমেন্ট-ভেরিয়েবল হেডারসহ HTTP |
| VS Code Local | `.vscode/mcp.json` | পাসওয়ার্ড `promptString` ইনপুটসহ HTTP |
| Windsurf | `mcp_config.json` | বেয়ারার-হেডার প্লেসহোল্ডারসহ HTTP |
| অন্যান্য ক্লায়েন্ট | URL এবং Authorization হেডার | Streamable HTTP |

TgWitness কোনো OAuth ডিসকভারি ছাড়াই বেয়ারার টোকেন ব্যবহার করে। যেসব ক্লায়েন্টের রিমোট কানেক্টরের জন্য OAuth প্রয়োজন হয়, সেগুলোর ক্ষেত্রে লোকাল stdio ব্রিজ ব্যবহার করুন। VS Code-এর ক্ষেত্রে, ইনপুট ভেরিয়েবলগুলো **Local** হারনেসে প্রযোজ্য হয় এবং Copilot সেশনে ফরোয়ার্ড করা হয় না। কনফিগারেশন রেফারেন্স: [Claude Code](https://code.claude.com/docs/en/mcp), [Cursor](https://prod.cursor.com/docs/mcp), [VS Code](https://code.visualstudio.com/docs/agents/reference/mcp-configuration)।

লোকাল ব্রিজের জন্য আদর্শ এন্ট্রি পয়েন্ট হলো:

```
python -m tgwitness.mcp_server --url https://your-panel.example/mcp
```

ক্লায়েন্টের যে লোকাল Python-এ MCP এক্সট্রা ইনস্টল করা আছে সেটি ব্যবহার করুন। এর সুরক্ষিত এনভায়রনমেন্টে `TGWITNESS_MCP_TOKEN` সেট করুন। কমান্ড আর্গুমেন্ট এবং URL থেকে ক্রেডেনশিয়াল দূরে রাখুন। `tgwitness-mcp` একই এন্ট্রি পয়েন্ট হিসেবে কাজ করে। পুরনো `tgwitness.mcp_bridge` মডিউল এবং `TGWITNESS_ARCHIVE_TOKEN` নামটি একটি সতর্কবার্তাসহ কম্প্যাটিবিলিটি পাথ হিসেবে রয়ে গেছে; নতুন কনফিগারেশনে `mcp_server` এবং `TGWITNESS_MCP_TOKEN` ব্যবহৃত হয়।

## Cloudflare Tunnel

প্যানেলের `/mcp` রাউট ফরোয়ার্ড করুন এবং বেয়ারার হেডারটি অক্ষুণ্ণ রাখুন। অ্যাডমিনিস্ট্রেটর হিসেবে MCP সেটিংস ওপেন করলে তা এই রানের জন্য প্যানেলের বর্তমান অরিজিনকে নিবন্ধিত করে। রিস্টার্টের পরপরই একটি স্থায়ী অ্যাড্রেস পাওয়ার জন্য, প্যানেল চালু করার আগে প্যানেলের HTTPS অরিজিন দিয়ে `TGWITNESS_PUBLIC_URL` কনফিগার করুন। যেকোনো সাধারণ Host এবং ফরোয়ার্ড করা হেডার কোনো ট্রাস্টেড অ্যাড্রেস নিবন্ধন করে না। Host এবং Origin চেকগুলো অপ্রাসঙ্গিক ব্রাউজার অরিজিন প্রত্যাখ্যান করে। রেসপন্সগুলোতে `Cache-Control: no-store` ব্যবহৃত হয়; অথরাইজেশন ভ্যালু কখনোই লগ করা হয় না।

একটি `*.trycloudflare.com` অ্যাড্রেস অস্থায়ী হয়। টানেল রিস্টার্টের ফলে হোস্টনেম পরিবর্তিত হলে, কনফিগার করা পাবলিক URL এবং প্রতিটি ক্লায়েন্টের MCP URL আপডেট করুন। সেভ করা ক্লায়েন্ট কনফিগারেশনের জন্য একটি স্থায়ী হোস্টনেম ব্যবহার করুন।

## টুলস এবং সীমাবদ্ধতা

| টুল | যা পড়ে |
| --- | --- |
| `list_workspaces` | অনুমোদিত ওয়ার্কস্পেসসমূহ |
| `list_chats` | অনুমোদিত চ্যাটসমূহ |
| `search_messages` | নির্বাচিত সময়ের মধ্যে সেভ করা মেসেজ টেক্সট |
| `get_message_versions` | ক্যাপচার করা ভার্সন এবং ডিলিট সংক্রান্ত পর্যবেক্ষণ |
| `get_message_context` | কাছাকাছি ক্যাপচার করা মেসেজ আইডিগুলো |
| `get_journal_event` | সোর্স রেফারেন্সসহ একটি স্যানিটাইজড রেকর্ড |
| `get_capture_status` | কালেকশন স্টেট এবং অনুমোদিত কভারেজ রেকর্ডসমূহ |

`tools/list` শুধুমাত্র সেই সংযোগে অনুমোদিত টুলগুলোই রিটার্ন করে। অন্য টুলগুলোতে কল করা হলে তা প্রত্যাখ্যান করা হয়। এই বিল্ডে গ্রুপ-কনটেক্সট, এপিসোড, টার্মিনোলজি এবং রিপ্লাই-চেইন টুলগুলো অফার করা হয়নি; এগুলোর জন্য আলাদা কনটেক্সট-প্যাক ব্যাকএন্ড এতে অন্তর্ভুক্ত নেই।

প্রতিটি রিড অপারেশনে টোকেন, টুল এবং ওয়ার্কস্পেস/চ্যাট স্কোপ যাচাই করা হয়, এমনকি ডেটাবেসের কাজ শেষ হওয়ার পরেও। এর সীমাগুলো হলো প্রতি মিনিটে ৬০টি রিকোয়েস্ট, প্রতি পেজে ৫০টি রেকর্ড, প্রতি ফলাফলে 64 KiB এবং আট-সেকেন্ডের আর্কাইভ ডেডলাইন। কোনো MCP কল টাইম-আউট হলে তা একটি টুল এরর রিটার্ন করে এবং আরও ছোট সময়সীমা বা কম লিমিট ব্যবহারের অনুরোধ জানায়।

মেসেজের ফলাফলে `untrusted_content: true`, ওয়ার্কস্পেস/চ্যাট/মেসেজ আইডি, ইভেন্ট সিকোয়েন্স, সেভ করা হ্যাশ এবং একটি প্যানেল লিংক থাকে। কাঁচা (Raw) Telegram অবজেক্ট, অ্যাক্সেস হ্যাশ, সেশন এবং কী (keys) বাদ দেওয়া হয়। টেক্সট সংক্ষিপ্ত (truncation) করা হলে তা চিহ্নিত করা থাকে। এডিট, ডিলিট নোটিশ এবং `missing_on_recheck` হলো আলাদা আলাদা পর্যবেক্ষণ। রেকর্ড অনুপস্থিত থাকা মানে এই নয় যে ইভেন্টটি কখনোই ঘটেনি।

ক্যাপচার করা মেসেজের ভেতরের নির্দেশাবলীকে সর্বদা প্রমাণ (evidence) হিসেবে গণ্য করুন, কখনোই ক্লায়েন্টের নির্দেশ হিসেবে নয়। শুধুমাত্র-পড়ার (Read-only) অ্যাক্সেস আর্কাইভের পরিবর্তন রোধ করে; তবে ক্লায়েন্টকে যা পড়ার অনুমতি দেওয়া হয়েছে সেই কন্টেন্ট সে সংরক্ষণ করে রাখতে পারে। হ্যাশগুলো সেভ করা রেকর্ড শনাক্ত করে এবং ইন্টিগ্রিটি যাচাইয়ে সহায়তা করে; তবে সেগুলো Telegram-এর প্রকৃত প্রেরক বা সম্পূর্ণ ক্যাপচার প্রমাণ করে না।
