Cloudflare MCP होस्टिंग: Code Mode, Server Portals और सेटअप
Cloudflare Workers पर McpAgent और OAuth के साथ एक रिमोट MCP सर्वर डिप्लॉय करें, Code Mode के search and execute पैटर्न से टूल कॉन्टेक्स्ट छोटा करें, फिर Zero Trust Access पॉलिसी, टूल फ़िल्टरिंग और एक्सेस लॉग के साथ MCP Server Portal के पीछे अपने सर्वरों को समूहित करें।
आपका Model Context Protocol (MCP) सर्वर आपके लैपटॉप पर ठीक चलता है। फिर कोई टीम का साथी URL माँगता है, दूसरी एडिटर को किसी और मशीन पर इसकी ज़रूरत होती है, और सिक्योरिटी टीम से कोई पूछता है कि कौन-सा टूल कौन कॉल कर सकता है। कोई लोकल प्रोसेस इनमें से किसी का जवाब नहीं दे सकता। Cloudflare इस स्थिति के लिए तीन चीज़ें देता है: सर्वर होस्ट करने के लिए Workers, मॉडल को जो पढ़ना पड़ता है उसे छोटा करने के लिए Code Mode, और हर सर्वर को एक नियंत्रित दरवाज़े के पीछे रखने के लिए MCP Server Portals। नीचे हर हिस्सा क्रम से दिया गया है, ज़रूरी कमांड, कॉन्फ़िग और जाल के साथ, ताकि आप बिना अंदाज़े के खाली फ़ोल्डर से एक नियंत्रित सेटअप तक पहुँच सकें।
Cloudflare पर MCP क्यों होस्ट करें
लोकल सर्वरों की एक सीमा होती है
stdio सर्वर एक मशीन पर एक क्लाइंट का चाइल्ड प्रोसेस होता है। वीकेंड के प्रोजेक्ट के लिए यह ठीक है। लेकिन जैसे ही कोई दूसरा व्यक्ति आता है, यह काम करना बंद कर देता है: हर कोई अपनी कॉपी इंस्टॉल करता है, सीक्रेट्स लोकल कॉन्फ़िग फ़ाइलों में पड़े रहते हैं, और कोई नहीं देख पाता कि कौन-से टूल कॉल हो रहे हैं। एक रिमोट सर्वर इन सभी समस्याओं को हल कर देता है। आपको एक URL, एक डिप्लॉय और लॉग पढ़ने की एक जगह मिलती है।
एक स्थिति में लोकल अब भी जीतता है: ऐसा टूल जो किसी एक व्यक्ति की मशीन की फ़ाइलों को छूता है, जैसे निजी नोट्स का फ़ोल्डर। रिमोट होस्टिंग उन टूल्स के लिए है जिन्हें कई लोग या कई एजेंट साझा करते हैं।
Workers क्या लाते हैं
Workers आपका कोड Cloudflare के edge नेटवर्क पर चलाते हैं, उस व्यक्ति के करीब जो कॉल कर रहा है। MCP के लिए खास तौर पर Cloudflare तीन बिल्डिंग ब्लॉक देता है:
McpAgent, Agents SDK की एक क्लास जो रिमोट ट्रांसपोर्ट संभालती है। SDK आपके लिए Streamable HTTP सर्व करता है।
workers-oauth-provider, एक OAuth 2.1 प्रोवाइडर लाइब्रेरी जो आपके Worker को रैप करती है और उसके एंडपॉइंट्स पर ऑथराइज़ेशन जोड़ती है, MCP एंडपॉइंट्स समेत।
mcp-remote, एक एडैप्टर जो उन क्लाइंट्स को रिमोट सर्वर से जोड़ता है जो केवल stdio बोलते हैं।
ज़रूरत
लोकल stdio सर्वर
Workers पर रिमोट सर्वर
कौन इसका उपयोग कर सकता है
एक मशीन
URL और लॉगिन वाला कोई भी
अपडेट करना
हर मशीन पर फिर से इंस्टॉल करें
एक wrangler deploy
सीक्रेट्स
लोकल कॉन्फ़िग फ़ाइलें
Worker सीक्रेट्स
हर सेशन की स्टेट
प्रोसेस मेमोरी
Durable Objects
दृश्यता
कुछ भी बिल्ट-इन नहीं
Portal एक्सेस लॉग
💡 याद रखें: रिमोट का मतलब सार्वजनिक नहीं है। पहली डिप्लॉय से ही URL को इंटरनेट-फेसिंग API की तरह समझें।
अपना पहला रिमोट सर्वर डिप्लॉय करें
टेम्पलेट से स्कैफ़ोल्ड करें
Cloudflare बिना लॉगिन वाले सर्वर के लिए एक टेम्पलेट रखता है, जो चलने वाले हिस्सों को देखने का सबसे तेज़ तरीका है:
npm create cloudflare@latest -- my-mcp-server --template=cloudflare/ai/demos/remote-mcp-authless
cd my-mcp-server
npm start
आपका सर्वर अब http://localhost:8788/mcp पर लोकल रूप से सुन रहा है। और कुछ इंस्टॉल करने की ज़रूरत नहीं है।
McpAgent क्लास लिखें
प्रोजेक्ट का केंद्र एक ऐसी क्लास है जो McpAgent को extend करती है। टूल्स आप init() के अंदर रजिस्टर करते हैं, ठीक वैसे ही जैसे आधिकारिक TypeScript SDK के साथ करते हैं:
import { McpAgent } from "agents/mcp";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
export class MyMCP extends McpAgent {
server = new McpServer({ name: "math", version: "1.0.0" });
async init() {
this.server.tool("add", { a: z.number(), b: z.number() }, async ({ a, b }) => ({
content: [{ type: "text", text: String(a + b) }],
}));
}
}
export default MyMCP.serve("/mcp");
वह क्लास एक Durable Object भी है, इसीलिए प्रोजेक्ट कॉन्फ़िग में उसके लिए binding और migration घोषित होते हैं। Durable Objects हर MCP सेशन को आपकी तरफ़ किसी डेटाबेस के बिना अपनी स्टेट देते हैं। अगर आपके टूल्स केवल शुद्ध नतीजे लौटाते हैं, तो आप उस स्टेट को कभी नहीं छुएँगे। जिस पल आप कार्ट, ड्राफ़्ट या लंबी बातचीत ट्रैक करेंगे, आप इसके होने से खुश होंगे।
टेस्ट करें और शिप करें
दूसरे टर्मिनल में MCP Inspector चलाएँ और उसे लोकल URL की ओर इंगित करें:
npx @modelcontextprotocol/inspector@latest
उसके वेब इंटरफ़ेस से अपना टूल कॉल करें। जब वह सही व्यवहार करे, तब डिप्लॉय करें:
npx wrangler@latest deploy
फिर आपका सर्वर https://my-mcp-server.<your-account>.workers.dev/mcp पर लाइव होगा। वे क्लाइंट जो केवल stdio बोलते हैं, जैसे Claude Desktop, एडैप्टर के ज़रिए जुड़ते हैं:
डिप्लॉय किए गए वर्ज़न को टेस्ट करने के लिए आप URL को Cloudflare AI Playground या Inspector में भी पेस्ट कर सकते हैं।
OAuth के साथ लॉगिन जोड़ें
बिना ऑथ वाला सर्वर डेमो के लिए ठीक है, पर असली डेटा छूने वाली किसी भी चीज़ के लिए बुरा विचार है। Cloudflare का दूसरा टेम्पलेट GitHub को आइडेंटिटी प्रोवाइडर के रूप में जोड़ता है:
दो GitHub OAuth ऐप रजिस्टर करें, एक लोकल डेवलपमेंट के लिए और एक प्रोडक्शन के लिए, ताकि लीक हुआ डेव सीक्रेट कभी प्रोड तक न पहुँचे।
क्रेडेंशियल्स को Worker सीक्रेट्स के रूप में स्टोर करेंnpx wrangler secret put GITHUB_CLIENT_ID और npx wrangler secret put GITHUB_CLIENT_SECRET से, साथ में टेम्पलेट के README में बताया गया कुकी एन्क्रिप्शन सीक्रेट भी।
लौटाया गया namespace IDwrangler.jsonc में पेस्ट करें, फिर डिप्लॉय करें।
अंदर से देखें तो workers-oauth-provider आपके Worker को रैप करता है, इसलिए आपके टूल्स एक पैरामीटर के रूप में पहले से प्रमाणित उपयोगकर्ता की जानकारी पाते हैं। आपको टोकन जाँच हाथ से नहीं लिखनी पड़ती, और यही तो इसका पूरा मकसद है।
💡 टिप: GitHub एक ही विकल्प नहीं है। वही प्रोवाइडर लाइब्रेरी किसी भी OAuth आइडेंटिटी प्रोवाइडर के सामने लग सकती है, और यह तब मायने रखता है जब आप सर्वर को पोर्टल के पीछे रखने की योजना बनाएँ।
Code Mode टोकन लागत कैसे घटाता है
लंबी टूल सूचियाँ कॉन्टेक्स्ट खा जाती हैं
आप जो भी टूल डेफ़िनिशन एक्सपोज़ करते हैं, वह ऐसा टेक्स्ट है जिसे मॉडल को कुछ भी उपयोगी करने से पहले पढ़ना पड़ता है। दस टूल्स के साथ यह संभाला जा सकता है। पूरे प्लेटफ़ॉर्म के साथ यह ढह जाता है। Cloudflare बताता है कि उसके 2,500 से ज़्यादा एंडपॉइंट्स वाले API को सामान्य MCP टूल्स के रूप में एक्सपोज़ करने में 1.17 मिलियन टोकन लगेंगे। Code Mode के साथ वही पहुँच लगभग 1,000 टोकन में समा जाती है।
एक दूसरी लागत है जिस पर कम ध्यान जाता है। सामान्य टूल-कॉलिंग लूप में हर बीच का नतीजा मॉडल से होकर वापस गुज़रता है। अगर स्टेप दो को स्टेप एक का आउटपुट चाहिए, तो मॉडल उसे पढ़ता है, दोबारा लिखता है और आगे भेजता है। Code Mode मॉडल को उसकी जगह एक छोटा प्रोग्राम लिखने देता है। निर्भर कॉल सैंडबॉक्स के अंदर चलती हैं, बीच का डेटा वहीं रहता है, और बातचीत में सिर्फ़ अंतिम जवाब लौटता है। कम राउंड ट्रिप का मतलब है पढ़ने के लिए कम टेक्स्ट और किसी वैल्यू को गलत कॉपी करने के कम मौके।
व्यवहार में search और execute
बड़े API वाला पैटर्न, openApiMcpServer(), सिर्फ़ दो टूल एक्सपोज़ करता है:
search एक OpenAPI डॉक्यूमेंट के विरुद्ध मॉडल-लिखित कोड को सैंडबॉक्स के अंदर चलाता है और केवल वही ऑपरेशन, पैरामीटर या स्कीमा लौटाता है जिनकी काम के लिए ज़रूरत है।
execute मॉडल-लिखित कोड को उस authenticated request फ़ंक्शन के साथ चलाता है जो आपका Worker देता है।
जैसा docs कहते हैं, मॉडल के कॉन्टेक्स्ट में केवल लौटाया गया सबसेट आता है। मॉडल एक सीमित सवाल पूछता है, एक सीमित जवाब पाता है, फिर कार्रवाई करता है।
सोचिए एक अनुरोध जैसे मेरे ज़ोन के लिए DNS रिकॉर्ड सूचीबद्ध करें। मॉडल पहले search के लिए एक छोटा स्निपेट लिखता है जो OpenAPI paths को DNS operations तक फ़िल्टर करता है, और हज़ारों की जगह कुछ मिलान लौटाता है। फिर वह execute के लिए एक स्निपेट लिखता है जो आपके request फ़ंक्शन के ज़रिए सही operation कॉल करता है और केवल ज़रूरी फ़ील्ड्स लौटाता है। दो छोटे राउंड ट्रिप एक ऐसी टूल सूची की जगह लेते हैं जो फ़ोन बुक जितनी बड़ी हो।
इसे बनाने के लिए आपको एक Workers प्रोजेक्ट, एक OpenAPI 3.x डॉक्यूमेंट और अनुरोधों को प्रमाणित करने का होस्ट-साइड तरीका चाहिए।
सैंडबॉक्स कोड को सीमित रखता है
मॉडल-लिखित कोड एक अलग-थलग Worker में चलता है, और डिफ़ॉल्ट रूप से सीधे आउटबाउंड नेटवर्क एक्सेस ब्लॉक है। जनरेट हुआ कोड बाहरी दुनिया तक केवल अपस्ट्रीम MCP टूल्स या उस request callback के ज़रिए पहुँच सकता है जो आप देते हैं। यह एक मज़बूत डिफ़ॉल्ट है, पर यह आपके लिए ऑथराइज़ेशन नहीं करता:
कोई भी side effect होने से पहले अपने टूल हैंडलर या request callback के भीतर अनुमतियाँ लागू करें।
क्रेडेंशियल्स को कभी टूल नतीजों या OpenAPI डॉक्यूमेंट में न रखें।
callback को उस एक जगह की तरह देखें जहाँ कोई खराब अनुरोध सचमुच नुकसान कर सकता है।
सही पैटर्न चुनें
codeMcpServer()
openApiMcpServer()
सबसे अच्छा किसके लिए
किसी मौजूदा MCP सर्वर को प्रबंधनीय टूल सेट के साथ रैप करना
बड़े API कैटलॉग
मॉडल क्या देखता है
हर अपस्ट्रीम operation की TypeScript डेफ़िनिशन वाला एक code टूल
दो टूल: search और execute
कॉल कैसे होती हैं
एक codemode namespace के ज़रिए, ताकि निर्भर कॉल सैंडबॉक्स के अंदर जुड़ सकें
होस्ट द्वारा दिए गए request फ़ंक्शन से चुने हुए operations कॉल होते हैं
कॉन्टेक्स्ट लागत
अपस्ट्रीम टूल्स की संख्या के साथ बढ़ती है
सीमित, क्योंकि केवल search के नतीजे वापस आते हैं
💡 सामान्य नियम: जो आपके पास पहले से है उसे codeMcpServer() से रैप करें। openApiMcpServer() तब इस्तेमाल करें जब आपकी टूल सूची टूलबॉक्स नहीं, कैटलॉग बन जाए।
MCP Server Portal सेट अप करें
MCP Server Portals अगस्त 2025 में Cloudflare One के हिस्से के रूप में open beta में लॉन्च हुए। विचार सरल है: हर MCP अनुरोध को एक portal एंडपॉइंट से होकर भेजें, वहाँ Zero Trust पॉलिसी लागू करें, और सब कुछ लॉग करें।
पहले शर्तें जाँचें
डैशबोर्ड खोलने से पहले तीन बातें पक्की करें:
आपके पास एक सक्रिय Cloudflare डोमेन है, जो full या partial (CNAME) सेटअप में हो।
Cloudflare Zero Trust में एक आइडेंटिटी प्रोवाइडर कॉन्फ़िगर है।
आपके सर्वर HTTP पर पहुँच योग्य हैं। केवल-stdio सर्वर तब तक समर्थित नहीं हैं जब तक आप उन्हें रैप न करें। एक portal में 80 सर्वर तक हो सकते हैं।
सर्वर जोड़ें, फिर portal बनाएँ
डैशबोर्ड में Zero Trust > Access controls > MCP Portals पर जाएँ और MCP servers टैब खोलें।
Add MCP server चुनें। नाम, एक वैकल्पिक कस्टम Server ID, सर्वर का पूरा HTTP URL, और वे Access पॉलिसी दर्ज करें जो तय करती हैं कि उसे कौन देखेगा।
OAuth-enabled सर्वरों के लिए ऑटोमैटिक Dynamic Client Registration (सिफ़ारिश की जाती है) इस्तेमाल करें या क्रेडेंशियल्स मैन्युअली दर्ज करें। डैशबोर्ड का callback URL अपने OAuth प्रोवाइडर की allowlist में जोड़ें।
MCP Portals पेज पर लौटकर Add MCP server portal चुनें। एक नाम सेट करें, एक कस्टम डोमेन जिसके साथ वैकल्पिक सबडोमेन हो, वे सर्वर जो जोड़ने हैं, और उपयोगकर्ताओं के लिए access पॉलिसी।
क्लाइंट्स को https://<subdomain>.<domain>/mcp से कनेक्ट करें।
सर्वर केवल उन्हीं लोगों को portal में दिखता है जो किसी Allow पॉलिसी से मेल खाते हैं। बीटा में मेनू के लेबल बदल सकते हैं, इसलिए किसी भी स्क्रीनशॉट से ज़्यादा मौजूदा डैशबोर्ड पर भरोसा करें।
टूल्स छाँटें और ऑथ सेट करें
Portal सेटिंग्स के अंदर आप किसी भी टूल या प्रॉम्प्ट के बगल का टॉगल बंद करके उसे छिपा सकते हैं। हर सर्वर पर Tools authorized गिनती दिखती है, ताकि आप देख सकें कि आपने कितना एक्सपोज़ किया है। कुछ नियंत्रण जानने लायक हैं:
Require user auth तय करता है कि लोग अपने क्रेडेंशियल्स से साइन इन करें या एडमिन क्रेडेंशियल एक्सेस संभाले।
Namespacing टूल्स को {server_id}_{tool_name} के रूप में दिखाता है, ताकि दो सर्वरों में एक ही search टूल हो सके, बिना टकराव के।
Aliases portal या सर्वर स्तर पर टूल्स और प्रॉम्प्ट्स के नाम बदलते हैं।
Code Mode portal के लिए चालू किया जा सकता है, ताकि टोकन उपयोग घटे।
Gateway routing संवेदनशील डेटा के लिए वैकल्पिक DLP जाँच जोड़ सकता है।
एक्सेस लॉग पढ़ें
Portal लॉग समय, स्टेटस, सर्वर का नाम, capability और अवधि दर्ज करते हैं, portal या सर्वर के हिसाब से। इन्हें Logpush के ज़रिए third-party स्टोरेज या SIEM में एक्सपोर्ट किया जा सकता है। टीम रोलआउट के लिए यही वह जगह है जहाँ आप पहले पैराग्राफ़ में सिक्योरिटी टीम के सवाल का जवाब देते हैं: किसने क्या कॉल किया, और कब।
एक रोलआउट क्रम जो आश्चर्यों को छोटा रखता है:
OAuth के साथ एक सर्वर डिप्लॉय करें और उसे Inspector में टेस्ट करें।
उसे सिर्फ़ एक पायलट ग्रुप के लिए Allow पॉलिसी वाले portal में जोड़ें।
वह कोई भी टूल बंद करें जिसकी पायलट ग्रुप को ज़रूरत नहीं।
कुछ दिनों बाद लॉग जाँचें कि कहीं अनपेक्षित कॉलर या फ़ेल होती कॉल तो नहीं।
पॉलिसी का दायरा बढ़ाएँ, फिर अगला सर्वर जोड़ें।
गलतियाँ जो घंटों खा जाती हैं
बिना लॉगिन के workers.dev URL साझा करना। यह काम करता है, और यही खतरा है। अपनी मशीन के बाहर किसी को भी पता देखने से पहले OAuth जोड़ें।
खाली Allow पॉलिसी। जो उपयोगकर्ता portal में साइन इन करते हैं और "No allowed servers available, check your Zero Trust Policies" देखते हैं, उनके पास लगभग हमेशा portal या सर्वर पर मेल खाती Allow पॉलिसी नहीं होती।
callback URL भूल जाना। OAuth-enabled सर्वर तब तक कनेक्ट नहीं होते जब तक डैशबोर्ड का callback URL आपके प्रोवाइडर की allowlist में न हो।
क्रेडेंशियल्स वहाँ रखना जहाँ मॉडल उन्हें पढ़ सके। Code Mode के साथ, टूल नतीजे या OpenAPI डॉक्यूमेंट में जो भी है, वह मॉडल-लिखित कोड को दिखता है।
portal के अंदर stdio की उम्मीद करना। पहले सर्वर को HTTP के पीछे रैप करें, या उसे Workers पर होस्ट करें।
Inspector छोड़ देना। जो टूल आपके एडिटर में काम करता है, वह फिर भी डिप्लॉय किए गए URL पर फ़ेल हो सकता है। portal में जोड़ने से पहले लाइव /mcp एंडपॉइंट टेस्ट करें।
💡 त्वरित टेस्ट: portal को उस उपयोगकर्ता के रूप में खोलें जो आपकी Allow पॉलिसी में नहीं है। अगर आपको कोई भी सर्वर दिखता है, तो आपकी पॉलिसी गलत है।
इसे PicassoIA मॉडल के साथ जोड़ें
क्लाइंट के लिए मॉडल चुनें
जो भी क्लाइंट आपका सर्वर कॉल करता है, उसके पीछे एक सक्षम मॉडल होना चाहिए। ये PicassoIA लैंग्वेज मॉडल आपके टूल्स के खिलाफ टेस्ट करने लायक हैं:
डिप्लॉय करने से पहले भी ये काम आते हैं: इनसे टूल डिस्क्रिप्शन का ड्राफ़्ट बनवाएँ, वह TypeScript लिखवाएँ जो आप Code Mode को देंगे, या अपने OpenAPI डॉक्यूमेंट की समीक्षा करवाएँ कि कौन से ऐसे operations हैं जिन्हें आप एक्सपोज़ नहीं करना चाहेंगे।
अपने सर्वर में इमेज टूल जोड़ें
Worker कोई भी HTTP API कॉल कर सकता है, इसलिए MCP टूल PicassoIA का API भी कॉल कर सकता है। PicassoIA APIhttps://api.picassoia.com/v1 पर है, एक bearer टोकन लेता है जो pia_sk_ से शुरू होता है, और Replicate-style पैटर्न का पालन करता है: POST /v1/models/{owner}/{name}/predictions एक जॉब बनाता है और GET /v1/predictions/{id} उसकी स्थिति पढ़ता है। जॉब एसिंक्रोनस होते हैं, और एक अकाउंट एक साथ अधिकतम 5 predictions चला सकता है।
वह आकार दो टूल्स में सीधा फिट बैठता है: एक जो जनरेशन शुरू करे और एक id लौटाए, और एक जो नतीजे के लिए poll करे। टोकन को npx wrangler secret put PICASSOIA_API_TOKEN से स्टोर करें, और उसे कभी टूल नतीजे में प्रिंट न करें। अगर आप कुछ बनाना नहीं चाहते, तो PicassoIA अपना MCP कनेक्शन भी देता है, जो आपके क्लाइंट को सीधे वही इमेज और वीडियो मॉडल देता है।
आज ही PicassoIA पर इसे आज़माएँ
अब आपके पास पूरा रास्ता है: एक Worker जो MCP सर्व करता है, उसके सामने OAuth, कॉन्टेक्स्ट छोटा रखने के लिए Code Mode, और सब कुछ नियंत्रित करने के लिए एक portal। सबसे तेज़ इनाम तब मिलता है जब सर्वर कुछ ऐसा करके दिखाए जो देखा जा सके।
Seedream 5 Pro, GPT Image 2 या FLUX 2 Pro खोलें और उस फ़ोटो का प्रॉम्प्ट लिखें जो आप अपने पिछले प्रोजेक्ट में चाहते थे। फिर Seedance 2.0 या Veo 3.1 Fast से और आगे बढ़ें और स्थिर इमेज को गतिशील बनाएँ। रोशनी, लेंस और एंगल के साथ तब तक प्रयोग करें जब तक नतीजा असली शूट जैसा न लगे।
हर मॉडल picassoia.com/en/all-models पर सूचीबद्ध है। कोई एक चुनें, एक प्रॉम्प्ट चलाएँ, और देखें कि क्या नतीजा आता है।