spinny:~/writing $ less mcp-model-context-protocol-guide.md
12**Model Context Protocol (MCP)** হল Anthropic দ্বারা তৈরি একটি ওপেন স্ট্যান্ডার্ড যা নির্ধারণ করে কীভাবে AI মডেল বাহ্যিক টুলস, ডেটা সোর্স এবং সার্ভিসের সাথে যোগাযোগ করে। এটিকে "AI এর USB-C" হিসাবে ভাবুন - একটি ইউনিভার্সাল কানেক্টর যা যেকোনো AI এজেন্টকে একটি স্ট্যান্ডার্ডাইজড ইন্টারফেসের মাধ্যমে যেকোনো টুলের সাথে কথা বলতে দেয়।34লঞ্চের পর থেকে, MCP **প্রতি মাসে 97 মিলিয়ন SDK ডাউনলোড** অতিক্রম করেছে এবং প্রতিটি প্রধান AI প্রদানকারী দ্বারা গৃহীত হয়েছে: Anthropic, OpenAI, Google, Microsoft এবং Amazon। এই গাইডে, আমরা MCP দিয়ে তৈরি করতে আপনার যা জানা দরকার তার সবকিছু অন্বেষণ করব।56## কেন MCP আছে78MCP এর আগে, প্রতিটি AI অ্যাপ্লিকেশনকে প্রতিটি টুলের জন্য কাস্টম ইন্টিগ্রেশন তৈরি করতে হতো। আপনার AI কে ফাইল পড়াতে চান? কাস্টম কোড লিখুন। ডেটাবেস কুয়েরি করতে? আরও কাস্টম কোড। Slack এ পোস্ট করতে? আরেকটি ইন্টিগ্রেশন।910এটি একটি **N×M সমস্যা** তৈরি করেছিল: N AI অ্যাপ্লিকেশন প্রতিটির M কাস্টম ইন্টিগ্রেশন প্রয়োজন, যা ডুপ্লিকেট প্রচেষ্টা এবং খণ্ডিত ইকোসিস্টেমের দিকে নিয়ে গেছে।1112```mermaid13graph TD14 subgraph "Before MCP (N×M)"15 A1[AI App 1] --> T1[GitHub Integration]16 A1 --> T2[Slack Integration]17 A1 --> T3[DB Integration]18 A2[AI App 2] --> T4[GitHub Integration]19 A2 --> T5[Slack Integration]20 A2 --> T6[DB Integration]21 end22```2324MCP এটি একটি **একক প্রোটোকল** দিয়ে সমাধান করে যা যেকোনো AI ক্লায়েন্ট যেকোনো MCP সার্ভারের সাথে যোগাযোগ করতে ব্যবহার করতে পারে:2526```mermaid27graph TD28 subgraph "With MCP (N+M)"29 A1[AI App 1] --> MCP[MCP Protocol]30 A2[AI App 2] --> MCP31 MCP --> S1[GitHub Server]32 MCP --> S2[Slack Server]33 MCP --> S3[DB Server]34 end35```3637## মূল ধারণাসমূহ3839MCP এর তিনটি মৌলিক প্রিমিটিভ রয়েছে:4041### 1. টুলস (Tools)42টুলস হল ফাংশন যা AI কল করতে পারে। এগুলি "একটি ফাইল তৈরি করুন", "একটি ডেটাবেস কুয়েরি করুন" বা "একটি মেসেজ পাঠান" এর মতো অ্যাকশন উপস্থাপন করে। প্রতিটি টুলের একটি নাম, বিবরণ এবং এর প্যারামিটারের জন্য একটি JSON Schema আছে।4344```typescript45{46 name: "create_issue",47 description: "Create a new GitHub issue",48 inputSchema: {49 type: "object",50 properties: {51 title: { type: "string", description: "Issue title" },52 body: { type: "string", description: "Issue body" },53 repo: { type: "string", description: "Repository name" }54 },55 required: ["title", "repo"]56 }57}58```5960### 2. রিসোর্স (Resources)61রিসোর্স হল ডেটা যা AI পড়তে পারে। এগুলি ফাইল, ডেটাবেস রেকর্ড, API রেসপন্স বা অন্য যেকোনো ডেটা সোর্স উপস্থাপন করে। রিসোর্সগুলি URIs দ্বারা চিহ্নিত হয়।6263```typescript64{65 uri: "file:///Users/dev/project/README.md",66 name: "Project README",67 mimeType: "text/markdown"68}69```7071### 3. প্রম্পট (Prompts)72প্রম্পট হল পুনরায় ব্যবহারযোগ্য টেমপ্লেট যা ইন্টারঅ্যাকশন গঠন করতে সাহায্য করে। এগুলিতে ডায়নামিক প্যারামিটার অন্তর্ভুক্ত থাকতে পারে এবং সাধারণ ওয়ার্কফ্লো স্ট্যান্ডার্ডাইজ করার জন্য উপযোগী।7374```typescript75{76 name: "code_review",77 description: "Review code changes for quality and security",78 arguments: [79 { name: "diff", description: "The code diff to review", required: true }80 ]81}82```8384## আর্কিটেকচার8586MCP একটি ক্লায়েন্ট-সার্ভার আর্কিটেকচার অনুসরণ করে:8788```mermaid89graph LR90 subgraph "Host Application"91 Client[MCP Client]92 end9394 subgraph "MCP Server"95 Server[Server Process]96 Server --> Tools[Tools]97 Server --> Resources[Resources]98 Server --> Prompts[Prompts]99 end100101 Client -- "JSON-RPC 2.0\n(stdio or SSE)" --> Server102```103104- **হোস্ট**: AI অ্যাপ্লিকেশন (Claude Desktop, Cursor, আপনার কাস্টম অ্যাপ)105- **ক্লায়েন্ট**: একটি MCP সার্ভারের সাথে 1:1 সংযোগ বজায় রাখে106- **সার্ভার**: ক্লায়েন্টের কাছে টুলস, রিসোর্স এবং প্রম্পট প্রকাশ করে107- **ট্রান্সপোর্ট**: stdio (লোকাল) বা Server-Sent Events (রিমোট) এর মাধ্যমে JSON-RPC 2.0 দিয়ে যোগাযোগ হয়108109## একটি MCP সার্ভার তৈরি করা110111চলুন একটি প্র্যাক্টিক্যাল MCP সার্ভার তৈরি করি যা একটি JSON ফাইলে সংরক্ষিত টুডু লিস্টের সাথে ইন্টারঅ্যাক্ট করে।112113### সেটআপ114115```bash116mkdir mcp-todo-server && cd mcp-todo-server117npm init -y118npm install @modelcontextprotocol/sdk zod119```120121### সার্ভার ইমপ্লিমেন্টেশন122123```typescript124// src/index.ts125import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";126import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";127import { z } from "zod";128import fs from "fs";129130const TODO_FILE = "./todos.json";131132function readTodos(): { id: number; text: string; done: boolean }[] {133 if (!fs.existsSync(TODO_FILE)) return [];134 return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8"));135}136137function writeTodos(todos: { id: number; text: string; done: boolean }[]) {138 fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2));139}140141const server = new McpServer({142 name: "todo-server",143 version: "1.0.0",144});145146// Tool: Add a todo147server.tool(148 "add_todo",149 "Add a new todo item",150 { text: z.string().describe("The todo text") },151 async ({ text }) => {152 const todos = readTodos();153 const newTodo = { id: Date.now(), text, done: false };154 todos.push(newTodo);155 writeTodos(todos);156 return { content: [{ type: "text", text: `Added: "${text}"` }] };157 }158);159160// Tool: List todos161server.tool(162 "list_todos",163 "List all todo items",164 {},165 async () => {166 const todos = readTodos();167 const list = todos168 .map((t) => `${t.done ? "✅" : "⬜"} [${t.id}] ${t.text}`)169 .join("\n");170 return { content: [{ type: "text", text: list || "No todos yet." }] };171 }172);173174// Tool: Complete a todo175server.tool(176 "complete_todo",177 "Mark a todo as completed",178 { id: z.number().describe("The todo ID to complete") },179 async ({ id }) => {180 const todos = readTodos();181 const todo = todos.find((t) => t.id === id);182 if (!todo) return { content: [{ type: "text", text: "Todo not found." }] };183 todo.done = true;184 writeTodos(todos);185 return { content: [{ type: "text", text: `Completed: "${todo.text}"` }] };186 }187);188189// Resource: Current todos as a readable resource190server.resource(191 "todos://list",192 "Current todo list",193 async () => ({194 contents: [{195 uri: "todos://list",196 mimeType: "application/json",197 text: JSON.stringify(readTodos(), null, 2),198 }],199 })200);201202// Start the server203const transport = new StdioServerTransport();204await server.connect(transport);205```206207### কনফিগারেশন208209Claude Desktop এর সাথে এই সার্ভার ব্যবহার করতে, আপনার কনফিগে এটি যোগ করুন:210211```json212{213 "mcpServers": {214 "todo": {215 "command": "npx",216 "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"]217 }218 }219}220```221222## একটি MCP ক্লায়েন্ট তৈরি করা223224আপনি একটি কাস্টম ক্লায়েন্টও তৈরি করতে পারেন যা যেকোনো MCP সার্ভারের সাথে সংযোগ করে:225226```typescript227import { Client } from "@modelcontextprotocol/sdk/client/index.js";228import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";229230const transport = new StdioClientTransport({231 command: "npx",232 args: ["tsx", "./src/index.ts"],233});234235const client = new Client({ name: "my-client", version: "1.0.0" });236await client.connect(transport);237238// List available tools239const { tools } = await client.listTools();240console.log("Available tools:", tools.map((t) => t.name));241242// Call a tool243const result = await client.callTool({244 name: "add_todo",245 arguments: { text: "Write MCP blog post" },246});247console.log(result);248```249250## জনপ্রিয় MCP সার্ভার251252MCP ইকোসিস্টেম দ্রুত বৃদ্ধি পেয়েছে। এখানে কিছু জনপ্রিয় সার্ভার রয়েছে:253254| সার্ভার | বিবরণ | ব্যবহারের ক্ষেত্র |255|---------|--------|-------------------|256| **GitHub** | Issue, PR তৈরি, রেপো পরিচালনা | ডেভেলপমেন্ট ওয়ার্কফ্লো |257| **Slack** | মেসেজ পাঠানো, চ্যানেল পরিচালনা | টিম কমিউনিকেশন |258| **PostgreSQL** | ডেটাবেস কুয়েরি ও পরিচালনা | ডেটা অ্যাক্সেস |259| **Filesystem** | ফাইল পড়া, লেখা ও অনুসন্ধান | লোকাল ডেভেলপমেন্ট |260| **Puppeteer** | ব্রাউজার অটোমেশন ও স্ক্র্যাপিং | ওয়েব টেস্টিং |261| **Sentry** | এরর মনিটরিং ও ডিবাগিং | প্রোডাকশন সাপোর্ট |262| **Supabase** | ডেটাবেস, auth, স্টোরেজ | ব্যাকএন্ড অপারেশন |263264## MCP বনাম A2A (Agent-to-Agent)265266MCP **এজেন্ট-টু-টুল** যোগাযোগ পরিচালনা করে, আর Google এর **A2A (Agent-to-Agent)** প্রোটোকল **এজেন্ট-টু-এজেন্ট** যোগাযোগ পরিচালনা করে। এগুলি পরিপূরক:267268```mermaid269graph TD270 Agent1[Agent 1] -- "A2A Protocol" --> Agent2[Agent 2]271 Agent1 -- "MCP Protocol" --> Tool1[GitHub MCP Server]272 Agent2 -- "MCP Protocol" --> Tool2[Database MCP Server]273```274275- **MCP**: কীভাবে একটি AI এজেন্ট টুলস ব্যবহার করে (উল্লম্ব ইন্টিগ্রেশন)276- **A2A**: কীভাবে AI এজেন্টরা একে অপরের সাথে সহযোগিতা করে (অনুভূমিক ইন্টিগ্রেশন)277278## সেরা অনুশীলন2792801. **সার্ভারকে ফোকাসড রাখুন**: প্রতিটি ডোমেনের জন্য একটি সার্ভার (GitHub সার্ভার, Slack সার্ভার, ইত্যাদি)। মনোলিথিক সার্ভার তৈরি করবেন না।2812. **Zod দিয়ে ইনপুট ভ্যালিডেট করুন**: সর্বদা সঠিক স্কিমা দিয়ে টুল ইনপুট ভ্যালিডেট করুন।2823. **এরর সুন্দরভাবে হ্যান্ডেল করুন**: স্ট্যাক ট্রেস নয়, অর্থবহ এরর মেসেজ ফেরত দিন।2834. **রিড-অনলি ডেটার জন্য রিসোর্স ব্যবহার করুন**: AI যদি শুধুমাত্র ডেটা পড়তে চায়, তাহলে টুলের বদলে রিসোর্স হিসাবে প্রকাশ করুন।2845. **সঠিক বিবরণ যোগ করুন**: ভালো টুল এবং প্যারামিটার বিবরণ AI কে বুঝতে সাহায্য করে কখন এবং কীভাবে প্রতিটি টুল ব্যবহার করতে হবে।2856. **MCP Inspector দিয়ে টেস্ট করুন**: আপনার সার্ভার ইন্টারঅ্যাক্টিভভাবে টেস্ট করতে `npx @modelcontextprotocol/inspector` ব্যবহার করুন।286287## শুরু করুন288289```bash290# Create a new MCP server from template291npx @modelcontextprotocol/create-server my-server292293# Test with the MCP Inspector294npx @modelcontextprotocol/inspector npx tsx ./src/index.ts295```296297## উপসংহার298299MCP 2026 সালে AI টুল ব্যবহারের জন্য ডি ফ্যাক্টো স্ট্যান্ডার্ড হয়ে উঠেছে। আপনি কাস্টম AI এজেন্ট তৈরি করছেন, Claude Code প্রসারিত করছেন, বা বিদ্যমান প্ল্যাটফর্মের জন্য ইন্টিগ্রেশন তৈরি করছেন, MCP বোঝা অপরিহার্য। প্রোটোকলটি একটি বিকেলে শেখার জন্য যথেষ্ট সহজ কিন্তু প্রোডাকশন-গ্রেড AI ওয়ার্কফ্লো তৈরি করার জন্য যথেষ্ট শক্তিশালী।300301**পরবর্তী পদক্ষেপ:**302- [MCP স্পেসিফিকেশন](https://spec.modelcontextprotocol.io/) অন্বেষণ করুন303- অনুপ্রেরণার জন্য [বিদ্যমান MCP সার্ভার](https://github.com/modelcontextprotocol/servers) ব্রাউজ করুন304- TypeScript বা Python SDK দিয়ে আপনার প্রথম সার্ভার তৈরি করুন305- Claude Desktop বা MCP Inspector দিয়ে টেস্ট করুন306
:MCP (Model Context Protocol): ডেভেলপারদের জন্য সম্পূর্ণ গাইডlines 1-306 (END) — press q to close