पाठ 8 / 31

Transports: stdio और Streamable HTTP

चुनें कि client और server संदेश कैसे बदलें।

स्थानीय pipes या दूरस्थ HTTP

MCP तय करता है कि संदेश कैसे चलें। stdio में host server को child process के रूप में शुरू करता है और standard input व output पर newline-सीमित JSON संदेश बदलता है (log stderr में करें, stdout में कभी नहीं, वरना stream बिगड़ जाती है)। यह सरल और स्थानीय है: server user की अनुमतियों से उनकी मशीन पर चलता है। Streamable HTTP HTTP उपयोग करता है ताकि servers दूरस्थ चल सकें, कई clients को सेवा दे सकें और उत्तर stream कर सकें (जहाँ ज़रूरी हो Server-Sent Events से)। दूरस्थ servers को authentication, session प्रबंधन, rate limits और TLS सँभालने होंगे; विनिर्देश संरक्षित दूरस्थ servers के लिए OAuth-आधारित प्राधिकरण की सिफ़ारिश करता है। पुराना HTTP+SSE transport था जो बदला जा चुका है, इसलिए देखें कि आपका SDK संस्करण कौन-सा समर्थित करता है।

stdio बनाम Streamable HTTP

चुनाव के लिए तुलना।

                 stdio                               Streamable HTTP
where it runs    child process on the user's machine  remote service (or local HTTP)
clients          one (the parent host)                many
auth             inherits the OS user                  OAuth / tokens required for protected data
logging          stderr only (stdout = protocol)       normal server logs
scaling          none needed                           load balancers, sessions, rate limits
best for         local tools, dev, files               shared/team/SaaS tools

त्वरित जाँच: stdio MCP server को stderr में log क्यों करना चाहिए?

  • Logs निषिद्ध हैं
  • stderr तेज़ है
  • stdout protocol संदेश ले जाता है और logs उसे बिगाड़ देंगे
  • यह logs को encrypt करता है
Answer

stdout protocol संदेश ले जाता है और logs उसे बिगाड़ देंगे — stdout पर कोई भी अतिरिक्त पाठ JSON संदेश stream तोड़ देता है।