या कोर्समधील प्रत्येक निवडीने कशाची तरी वाईट गोष्टीची जागा घेतली — आणि तीच निवड कुठेतरी चुकीचीही ठरते. प्रत्येकीसाठी: आधी आयुष्य कसे होते, प्रामाणिक गुण ✅ / दोष ❌, आणि कुठे वापरावी 👍 आणि कुठे नाही 👎.
प्रत्येक AI app प्रत्येक tool हाताने जोडत असे: IDE साठी एक GitHub integration, chatbot साठी दुसरे, agent साठी तिसरे — N apps × M tools = N×M adapters, एकही पुन्हा वापरता येणारे नाही. एखादी क्षमता म्हणजे एका product च्या आतली खाजगी जोडणी होती, दुसऱ्याच्या हातात देता येईल असा भाग नव्हे.
Model ला पोहोचता येणारी प्रत्येक गोष्ट 'एक function' होती. कागदपत्रे हाताने prompt मध्ये कोंबली जात, कृती (recipes) wiki पानांवर असत ज्या लोक paste करत, आणि कोण — model, app की वापरकर्ता — ठरवू शकतो हे सांगायचा मार्गच नव्हता. प्रत्येक integration ने ही विभागणी नव्याने शोधली.
प्रत्येक जोडणी एका विधीने सुरू होई: initialize → notifications/initialized, आणि उपकरण तुम्हाला लक्षात ठेवत असे — एक session, HTTP वर Mcp-Session-Id header, उपकरणाला तुम्हाला पाठवायच्या संदेशांसाठी एक GET stream. Load balancer मागच्या प्रत्येक instance ला तुमचे session माहीत असावे लागे, आणि उपकरण स्वतःच्या requests ने तुम्हाला मध्येच थांबवू शकत असे.
सुरुवातीची tool उपकरणे खास हाताने बनवलेली होती: import करायचे एक Python module, स्वतःचे auth असलेले REST API, एखादी shell script. Local काहीही remote वापरता येत नसे आणि remote काहीही offline चालत नसे. MCP ने सारखेच संदेश वाहून नेणाऱ्या दोन जोडण्यांवर निर्णय घेतला: तुमच्या machine वरची child process, किंवा कुठेही असलेले एक HTTP दार (endpoint).
Tool कडे एकतर लागणारे सगळे असे, नाहीतर ते अपयशी ठरे. वापरकर्त्याला काही विचारायचे असलेली उपकरणे back-channel उघडून स्वतःच्या requests पाठवत (sampling, elicitation) — म्हणजे जिवंत जोडणी, उपकरणाच्या बाजूला state, आणि कोणत्याही क्षणी उत्तर द्यायला तयार असावी लागणारी खोली.
Automation एकतर काहीच करू शकत नसे (फक्त बोलणारे chatbots) किंवा लगेच कृती करत असे (operator च्या पूर्ण permissions असलेल्या scripts). पहिले निरुपयोगी होते, दुसरे एका विषारी input मुळे table उडण्याच्या अंतरावर होते. मधली पातळीच नव्हती.