Model Context Protocol — AI ॲप्स आणि जग यांच्यामधला प्रमाणित प्लग — एका फरकाने शिकवलेला: प्रोटोकॉल रेपोच्या आतच आहे. खरा MCP server आणि खरा host/client, शुद्ध Python च्या ~230 ओळी, शून्य dependencies, सध्याची प्रोटोकॉल आवृत्ती (2026-07-28) बोलणारा. हलणारा प्रत्येक byte तुम्ही वाचता.
# the 60-second wow — the ENTIRE protocol, live:
git clone https://github.com/BaluRaut/learn-mcp-school.git && cd learn-mcp-school
python3 client/mini_client.py # watch every JSON-RPC message
python3 client/mini_client.py --drive # YOU pick the tool calls
तुम्हाला काय दिसायला हवे (छाटलेले — यश असे दिसते):
═══ 1) introductions 🪪 — server/discover (optional since 2026-07-28) ═══
→ {"jsonrpc": "2.0", "id": 1, "method": "server/discover", "params": {"_meta": {"io.modelcon …
← {"jsonrpc": "2.0", "id": 1, "result": {"resultType": "complete", "supportedVersions": ["20 …
🔬 school-server v2.0.0 speaks ['2026-07-28'] · stocks: tools
═══ 2) discovery 📋 — 'what do you offer?' ═════════════════
→ {"jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {"_meta": {"io.modelcontextp …
← {"jsonrpc": "2.0", "id": 2, "result": {"resultType": "complete", "tools": [{"name": "get_s …
🧰 get_student_count: How many students are in a class (3A or 3B)?
🧰 lookup_grade: Look up one student's grade (read-only).
🧰 add_homework: Add a homework item (WRITES state — hosts should confirm with the user!).
═══ 3) tool calls 🧰 — what an agent's loop would do ═══════
→ {"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "get_student_count" …
← {"jsonrpc": "2.0", "id": 3, "result": {"resultType": "complete", "content": [{"type": "tex …
📄 lands on the desk: Class 3A has 3 students: aishwarya, katrina, dipika.
→ {"jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {"name": "lookup_grade", "ar …
← {"jsonrpc": "2.0", "id": 4, "result": {"resultType": "complete", "content": [{"type": "tex …
📄 lands on the desk: Katrina (3A) has grade A+.
→ {"jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": {"name": "add_homework", "ar …
← {"jsonrpc": "2.0", "id": 5, "result": {"resultType": "complete", "content": [{"type": "tex …
📄 lands on the desk: Added ✏️ — homework list is now: [{"title": "read MCP lesson 05", "due": "Friday"}]
═══ done — that was the ENTIRE protocol: three verbs and a badge 🪪 (no handshake since 2026-07-28) ═══
4K आवृत्तीसाठी क्लिक करा.
एक git ब्रँच = एक कल्पना; ब्रँच 05 मध्ये धडे 01–05 आहेत. AI कोर्सच्या बोनस धडा 13 चा खोल साथीदार.
lesson-02-architectureधडा वाचा →आकृती पहा ↗lesson-03-primitivesधडा वाचा →आकृती पहा ↗lesson-04-the-wireधडा वाचा →आकृती पहा ↗lesson-05-transports-securityधडा वाचा →आकृती पहा ↗lesson-06-build-a-serverधडा वाचा →आकृती पहा ↗lesson-07-build-a-clientधडा वाचा →आकृती पहा ↗lesson-08-use-casesधडा वाचा →आकृती पहा ↗AI, MCP आणि Agents कोर्समध्ये एकसारखी ठेवलेली शाळेची भाषा — आणि बहुतेक रचना-प्रश्नांची उत्तरे देणारे दोन तक्ते.
| शाळेचा शब्द | MCP चा शब्द | ते काय आहे |
|---|---|---|
| 🏫 खोली | host | माणूस वापरतो ते AI ॲप; जिथे मॉडेल बसते; प्रत्येक परवानगीचा निर्णय याचा |
| 🔌 भिंतीवरचे socket | client | एका server शी एक जोडणी, host च्या आत; तार बोलतो |
| 🔬 उपकरण | server | एक क्षमता गुंडाळणारा छोटा प्रोग्राम; स्थानिक (stdio) किंवा दूरचा (Streamable HTTP) |
| 🧰📁📜 तीन कपाटे | tools · resources · prompts | server काय देतो; model / app / user प्रत्येकी एक ठरवतात |
| 🪪 बॅज | प्रत्येक विनंतीवर _meta | प्रोटोकॉल आवृत्ती + मी कोण + मी काय करू शकतो — 2026-07-28 मध्ये handshake ची जागा घेतली |
| 🪪 ओळखपरेड | server/discover | ऐच्छिक: "तू कोणत्या आवृत्त्या बोलतोस, काय ठेवतोस, तू कोण?" |
| 📄 टेबल | मॉडेलचा context | जिथे tool चे निकाल उतरतात (AI कोर्स L08) |
| निर्णय | कोण ठरवते |
|---|---|
| कोणते servers जोडलेले आहेत | वापरकर्ता, host च्या settings मार्फत |
| टेबलावर काय जाते (resources, इतिहास) | host / app |
| कोणते tool, कोणत्या arguments सह | मॉडेल — प्रस्ताव म्हणून |
| तो call प्रत्यक्ष चालतो का | host — सत्तेचा क्षण (धडा 07) |
| लिहिणे (write) घडते का | माणसाचा क्लिक (धोरण 3) |
| tool काय करते आणि काय परत देते | server |
| 🔌 stdio | 📡 Streamable HTTP | |
|---|---|---|
| server चालतो | तुमच्या मशीनवर, child process म्हणून | URL ने पोहोचता येईल तिथे कुठेही |
| ओळख | तुमचा user, तुमच्या परवानग्या | स्वतःची ओळख असलेली सेवा |
| auth | काहीच नाही — तो तुमचाच process | OAuth / tokens, प्रत्येक विनंतीला; प्रोटोकॉल session नाही |
| साजेसे | स्थानिक फाइल्स, git, dev साधने, हा कोर्स | टीम DBs, SaaS, एक server वापरणारे अनेक hosts |
| कपाट | कोण सुरू करते | कोण वापरते | क्रियापदे |
|---|---|---|---|
| 🧰 साधने | मॉडेल सुचवते (host च्या परवानगीने) | मॉडेल — निकाल → टेबल | tools/list · tools/call |
| 📁 resources | host/app जोडते | मॉडेल — टेबलावरचा context | resources/list · resources/read |
| 📜 prompts | वापरकर्ता निवडतो | मॉडेल / app | prompts/list · prompts/get |
flush=True ने का छापतो, आणि फसलेल्या tool ला crash ऐवजी isError ने उत्तर का देतो? (6) support-desk case मध्ये, refund tool जोडल्याच्या दिवशी माणसाचे मंजुरी-गेट कुठे ठेवाल?जांभळा = प्रोटोकॉल, नारिंगी = बांधा & deploy. धडे 02, 04 आणि 07 sequence आकृत्या म्हणून काढले आहेत — प्रोटोकॉलची नैसर्गिक भाषा. स्वतंत्र पानावरही.
adapter चा ड्रॉवर (N×M) → मानक socket (N+M).
कल्पना करा, वर्गातल्या प्रत्येक उपकरणाचा plug वेगळाच आहे, म्हणून प्रत्येक खोलीला प्रत्येक उपकरणासाठी खास adapter लागतो: 3 खोल्या × 4 उपकरणे = 12 adapters. मग शाळेने एकच standard socket ठरवला. प्रत्येक खोलीत socket एकदा बसवला, प्रत्येक उपकरणाला plug एकदा लावला: 3 + 4 = 7 कामे, आणि सगळे सगळीकडे चालते. AI apps आणि त्यांच्या tools मधला तो standard socket म्हणजे MCP.
प्रत्येक AI app ला प्रत्येक tool साठी हाताने बनवलेला adapter लागायचा: 3 hosts × 4 tools = 12 adapters, एकही पुन्हा वापरता येत नाही.
MCP म्हणजे AI tools साठी USB सारखा standard socket: प्रत्येक host एक socket आणि प्रत्येक server एक plug.
Protocol plug चा आकार ठरवतो: server काय देतो ते कसे विचारायचे, त्याला call कसा करायचा आणि उत्तर कसे वाचायचे.
12 ऐवजी 3 + 4 = 7 implementations: GitHub server एकदाच लिहा आणि प्रत्येक MCP host तो वापरू शकतो.
पुढचा धडा खोली उघडतो: host, client आणि server कोण आहेत, आणि काय चालेल ते कोण ठरवतो.
खोली (host) · भिंतीवरचे socket (client) · वाद्य (server).
विज्ञान प्रयोगशाळेत विद्यार्थी microscope मागू शकतो, पण तो द्यायचा की नाही ते खोलीतले शिक्षक ठरवतात. MCP असेच चालते: model शब्दांत मागतो, host (खोली) परवानगी तपासतो, आणि client (भिंतीवरचा socket) request server (उपकरण) पर्यंत नेतो, जो काम करतो. मग उत्तर परत model च्या बाकावर येते.
Model थेट tools call करू शकले असते, तर त्याच्या शब्दांमध्ये आणि तुमच्या data वरील खऱ्या कृतींमध्ये कोणीच नसते.
Host म्हणजे खोली: model विचारतो, host ठरवतो, आणि server client socket मधून काम करतो.
Model lookup_grade(student=katrina) मागतो; host परवानगी तपासतो, मग client tools/call पाठवतो.
परवानगीची तपासणी host मध्ये असते, आणि एक host प्रत्येक server connection साठी एक client चालवतो: GitHub, files, DB.
पुढे server काय देऊ शकतो ते पाहाल — tools, resources आणि prompts — आणि प्रत्येक घ्यायचे कोण ठरवतो.
Tools, resources, prompts — मॉडेल, ॲप आणि user प्रत्येकी एक ठरवतात.
वर्गात तीन कप्पे असतात. एकात काहीतरी करण्यासाठी वापरायच्या वस्तू, जसे stapler; एकात वाचायची पुस्तके आणि तक्ते; एकात तयार activity cards. MCP मध्ये model tools च्या कप्प्यातून निवडतो, app बाकावर कोणते resources ठेवायचे ते निवडते, आणि user prompt निवडतो, उदा. slash-command मेनूमधून.
सगळ्यालाच 'tool' म्हटले तर काय वापरायचे ते कोणी ठरवायचे हे लपते: model, app की user.
Server तीन कप्पे देतो: tools (कृती), resources (वाचता येणारा context) आणि prompts (सुचवलेल्या कृती-पद्धती).
Model lookup_grade सारखे tools निवडतो, app file:///handbook.pdf सारखे resources, आणि user /weekly-report निवडतो.
कोण ठरवतो हे कळले की नियंत्रण कुठे आहे ते कळते; server कोणतेही मिश्रण देऊ शकतो — school server फक्त तीन tools देतो.
पुढचा धडा wire वरील खरे messages दाखवतो: server/discover, tools/list आणि tools/call.
तीन क्रियापदे आणि प्रत्येक संदेशावर एक बॅज — संपूर्ण प्रोटोकॉल (आवृत्ती 2026-07-28), संदेशा-संदेशाने.
शाळा कार्यालयाला चिठ्ठी पाठवताना तुम्ही प्रत्येक चिठ्ठीवर नाव आणि वर्ग लिहिता, म्हणजे ड्युटीवरचा कोणताही कारकून तुम्हाला न आठवता उत्तर देऊ शकतो. MCP असेच चालते. तीन requests आहेत: 'तू काय support करतोस?', 'तुझे tools सांग' आणि 'हे tool चालव'. प्रत्येकावर स्वतःचा _meta badge असतो, म्हणून handshake नाही आणि session ठेवायची गरज नाही.
Handshake आणि session ने सुरू होणाऱ्या protocol मध्ये त्याच server ला प्रत्येक client लक्षात ठेवावा लागतो.
Wire म्हणजे तीन क्रियापदे — server/discover, tools/list, tools/call — आणि प्रत्येक request वर एक _meta badge.
tools/call {name: lookup_grade, arguments: {student: katrina}, id: 4} ला id 4 सह 'Katrina (3A) has grade A+' उत्तर मिळते.
Handshake नाही, session नाही: प्रत्येक request स्वतःचा badge घेऊन येतो, म्हणून कोणतीही server replica उत्तर देऊ शकते.
पुढचा धडा हेच messages दोन transports वरून नेतो — stdio आणि Streamable HTTP — आणि विश्वासाचे नियम जोडतो.
थेट प्लग (stdio) विरुद्ध extension cord (Streamable HTTP) — आणि न भाजण्याची तीन शिफारस केलेली धोरणे.
दिवा थेट भिंतीत plug करता येतो, किंवा extension cord ने दूरच्या socket पर्यंत नेता येतो. MCP servers ही अशाच दोन प्रकारे जोडतात: stdio, म्हणजे तुमच्याच computer वर चालणारा program, किंवा Streamable HTTP, म्हणजे internet पलीकडचा server जो बहुधा OAuth ने login मागतो. कसेही असो, सावध राहा: local server खरे software आहे, त्याची उत्तरे फक्त data आहेत, आणि बदलांसाठी माणसाचा होकार लागतो.
कोणताही server विचार न करता जोडला तर अनोळखी software तुमच्या परवानग्यांनी चालते आणि model ला धोकादायक मजकूर देते.
stdio म्हणजे local child process ला थेट plug; Streamable HTTP म्हणजे remote server पर्यंतची extension cord.
stdio stdin/stdout वरून प्रत्येक ओळीत एक JSON message पाठवतो; HTTP तेच messages POST ने, बहुधा OAuth सह पाठवतो.
तीन धोरणे: local server म्हणजे software, tool results म्हणजे data, आज्ञा नव्हे, आणि writes साठी माणसाची परवानगी.
पुढे तुम्ही स्वतःचा server बांधाल, मग असा client ज्याचा host allow? क्षणी ही धोरणे लागू करतो.
~125 प्रामाणिक ओळी: गुंडाळलेली वस्तू, कपाट, dispatcher, plumbing.
grade बद्दलच्या प्रश्नांना उत्तर देणाऱ्या शाळा कार्यालयाचा विचार करा. सगळ्यात मागे नोंदवही, मग कार्यालय काय करू शकते याची भिंतीवरची यादी, मग उत्तर शोधणारा कारकून, आणि पुढे एक खिडकी जिथून चिठ्ठ्या आत येतात आणि उत्तरे बाहेर जातात. school_server.py मध्ये सुमारे 125 ओळींत हेच चार थर आहेत, आणि MCP म्हणजे फक्त पुढची खिडकी.
स्पष्ट रचना नसेल तर server business logic आणि protocol plumbing एकत्र करतो आणि test करणे कठीण होते.
school_server.py म्हणजे चार थरांतील ~125 ओळी: wrapped गोष्ट, TOOLS कप्पा, run_tool आणि main() plumbing.
main() एक ओळ वाचतो, badge तपासतो, JSON-RPC dispatch करतो आणि print(..., flush=True) ने एक ओळ लिहितो.
run_tool ही साधी if-ladder आहे, protocol शिवाय unit-test करता येते, आणि errors नम्र JSON-RPC errors बनतात.
खेळण्यातील GRADES dict ऐवजी तुमचा Postgres किंवा API लावा; पुढचा धडा या server ला call करणारा client बांधतो.
सत्ता असलेली बाजू — मॉडेल सुचवते, HOST मध्यस्थी करतो.
विद्यार्थी म्हणू शकतो 'grade register आणा', पण ते खरोखर होईल की नाही ते वर्गशिक्षक ठरवतात. MCP मध्ये host म्हणजे ते शिक्षक: model फक्त tool call सुचवतो, आणि काहीही चालण्यापूर्वी host 'allow? [y/N]' ला थांबतो. खरा host विचारतो: हे tool चालण्याची परवानगी आहे का, inputs योग्य आहेत का, यामुळे काही बदलेल का? मग माणसाला विचारतो.
Model ने मागितलेले सगळे client ने सरळ चालवले, तर एक चुकीची सूचना कोणी न तपासता जग बदलू शकते.
खरी सत्ता client बाजूकडे असते: model फक्त सुचवतो, आणि tool call होईल की नाही ते host ठरवतो.
MiniHost tools/call {…, id: 4} पाठवण्यापूर्वी allow? [y/N] विचारतो, आणि result model च्या बाकावर येतो.
खरा host तपासतो: tool ला परवानगी आहे का, arguments योग्य आहेत का, ते जग बदलते का? मग माणसाला विचारतो.
client/mini_client.py मधील input() ऐवजी model API call लावा, आणि तुमच्याकडे खरा agent host तयार.
कोडिंग, support, डेटा, बैठका, अहवाल — sequence आकृत्यांसह.
एकच भिंतीवरचा socket projector, पंखा किंवा किटली चालवू शकतो. तसेच तोच MCP plug AI apps ना code लिहायला, support प्रश्नांची उत्तरे द्यायला, data तपासायला, meetings ची तयारी करायला किंवा reports लिहायला मदत करू देतो — फक्त बाकावर वेगवेगळे servers ठेवून. खऱ्या व्यवस्था read-only accounts आणि merge किंवा post करण्यापूर्वी माणसाच्या click ने सुरक्षित राहतात.
प्रत्येक AI product code, orders, calendars आणि chat साठी स्वतःचे खाजगी connectors पुन्हा पुन्हा जोडायचे.
पाच खरे hosts — coding, support, data, meeting prep, report robot — वेगवेगळ्या servers सह तोच plug वापरतात.
Data analyst आधी query_db (फक्त SELECT) आणि मग make_chart call करतो; meeting butler calendar, CRM आणि email वाचतो.
मर्यादित accounts आणि माणसाची परवानगी, जसे PR click आणि slack_post click, खरे deployments सुरक्षित ठेवतात.
Servers जोडून host वाढवा: एका बाकावर 3 servers म्हणजे प्रत्यक्षात N+M, आणि प्रत्येक नवा server प्रत्येक host सोबत चालतो.