ClickHouse
आधिकारिकअपने ClickHouse डेटाबेस सर्वर से क्वेरी करें।
ClickHouse MCP के साथ आप क्या कर सकते हैं?
- SQL क्वेरी चलाएँ —
run_queryके माध्यम से अपने ClickHouse क्लस्टर पर कोई भी SQL क्वेरी निष्पादित करने के लिए कहें,paramsके माध्यम से वैकल्पिक नामित पैरामीटर के साथ। - डेटाबेस सूचीबद्ध करें —
list_databasesका उपयोग करके अपने ClickHouse क्लस्टर पर उपलब्ध सभी डेटाबेस खोजें। - फ़िल्टर के साथ तालिकाएँ ब्राउज़ करें — किसी डेटाबेस में तालिकाओं का पता लगाने के लिए
list_tablesका उपयोग करें,like/not_likeपैटर्न औरpage_tokenतथाpage_sizeके माध्यम से पेजिनेशन लागू करें। - क्वेरी स्कीमा निरीक्षण करें — निष्पादित करने से पहले आउटपुट कॉलम या अनुमानित रीड जाँचने के लिए
run_queryके माध्यम सेDESCRIBE (<query>)याEXPLAIN ESTIMATE <query>के लिए पूछें। - एम्बेडेड chDB डेटा क्वेरी करें — ETL के बिना फ़ाइलों, URL या डेटाबेस को क्वेरी करने के लिए
run_chdb_select_queryका उपयोग करके सीधे chDB के एम्बेडेड इंजन के विरुद्ध SQL चलाएँ।
दस्तावेज़
ClickHouse MCP सर्वर
ClickHouse के लिए एक MCP सर्वर।
सर्वर MCP 2026-07-28 लागू करता है और 2024-11-05 से 2025-11-25 तक के लीगेसी initialize हैंडशेक का समर्थन करता है।
आधुनिक क्लाइंट sessionless अनुरोध और server/discover का उपयोग करते हैं।
मौजूदा क्लाइंट लीगेसी प्रोटोकॉल पर बातचीत जारी रख सकते हैं।
[!NOTE]
MCP-Protocol-Versionके बिना HTTP अनुरोध लीगेसी हैंडलिंग के माध्यम से रूट किए जाते हैं ताकि2025-06-18से पहले के क्लाइंट कनेक्ट हो सकें। MCP2026-07-28सर्वरों को उन क्लाइंटों का समर्थन करने वाले सर्वरों पर इस व्यवहार की अनुमति देता है। आधुनिक क्लाइंट को हर POST अनुरोध पर हेडर भेजना चाहिए।
विशेषताएँ
ClickHouse उपकरण
ClickHouse उपकरण प्रतिक्रियाएँ JSON-एन्कोडेड स्ट्रिंग्स हैं। [-9007199254740991, 9007199254740991] के बाहर के पूर्णांक
JavaScript क्लाइंट्स में सटीक मान संरक्षित करने के लिए दशमलव स्ट्रिंग्स के रूप में लौटाए जाते हैं।
यह क्वेरी पंक्तियों और पूर्णांक तालिका मेटाडेटा पर लागू होता है। सुरक्षित-सीमा के
पूर्णांक और बूलियन अपने JSON प्रकार बनाए रखते हैं।
-
run_query- अपने ClickHouse क्लस्टर पर SQL क्वेरी निष्पादित करें।
- इनपुट:
query(स्ट्रिंग): निष्पादित करने के लिए SQL क्वेरी। - वैकल्पिक इनपुट:
params(ऑब्जेक्ट): ClickHouse{name:Type}प्लेसहोल्डर्स के लिए नामित मान। क्वेरी पैरामीटर देखें। - क्वेरी डिफ़ॉल्ट रूप से केवल-पढ़ने के मोड में चलती हैं (
CLICKHOUSE_ALLOW_WRITE_ACCESS=false), लेकिन आवश्यकता पड़ने पर लेखन स्पष्ट रूप से सक्षम किया जा सकता है। DESCRIBE (<query>)औरEXPLAIN ESTIMATE <query>भी यहाँ चलते हैं और किसी क्वेरी के परिणाम स्कीमा या उसके अनुमानित रीड्स का निरीक्षण करने के वैकल्पिक तरीके हैं। क्वेरी चलाने से पहले उसकी जाँच करना देखें।
-
list_databases- अपने ClickHouse क्लस्टर पर सभी डेटाबेस सूचीबद्ध करें।
-
list_tables- पेजिनेशन के साथ डेटाबेस में तालिकाओं को सूचीबद्ध करें।
- आवश्यक इनपुट:
database(स्ट्रिंग)। - वैकल्पिक इनपुट:
like/not_like(स्ट्रिंग): तालिका नामों परLIKEयाNOT LIKEफ़िल्टर लागू करें।page_token(स्ट्रिंग): पिछले कॉल द्वारा लौटाया गया एकल-उपयोग टोकन। इसे एक घंटे तक बनाए रखा जाता है।page_size(int, डिफ़ॉल्ट50): प्रति पृष्ठ लौटाई गई तालिकाओं की संख्या;0से अधिक होनी चाहिए।include_detailed_columns(bool, डिफ़ॉल्टtrue): जबfalse, हल्के प्रतिक्रियाओं के लिए कॉलम मेटाडेटा छोड़ देता है जबकि पूर्णcreate_table_queryबनाए रखता है।
- प्रतिक्रिया आकार:
tables: वर्तमान पृष्ठ के लिए तालिका ऑब्जेक्ट्स की सरणी।next_page_token: अगला पृष्ठ लाने के लिए इस एकल-उपयोग मान को समाप्त होने से पहले वापस पास करें, याnullजब कोई और तालिका न हो।total_tables: प्रदान किए गए फ़िल्टर से मेल खाने वाली तालिकाओं की कुल संख्या।
एजेंट्स स्कीमा खोज
सर्वर निर्देश एजेंट्स स्कीमा के कैननिकल AGENTS.ROOT को run_query के माध्यम से पढ़ने का सुझाव देते हैं जब list_databases एक AGENTS डेटाबेस प्रकट करता है, विश्लेषणात्मक SQL लिखने से पहले। यह एजेंट के लिए मार्गदर्शन है: कोई मेटाडेटा स्वचालित रूप से नहीं लाया जाता है, उपकरण परिणाम अपरिवर्तित रहते हैं, और मौजूदा ClickHouse अनुमतियाँ अभी भी लागू होती हैं। यदि AGENTS.ROOT अनुपलब्ध या दुर्गम है, तो सामान्य खोज और क्वेरी उपलब्ध रहती हैं।
क्वेरी पैरामीटर
वैकल्पिक params ऑब्जेक्ट के माध्यम से SQL से अलग मान पास करें:
{
"query": "SELECT {id:UInt32} AS id, {name:String} AS name",
"params": {"id": 13, "name": "O'Reilly"}
}
ClickHouse के {name:Type} प्लेसहोल्डर्स का उपयोग बिना उद्धरण के करें। खुला ब्रेस, नाम और कोलन को आसन्न रखें, जैसे {id:UInt32} में। कोलन के बाद और प्रकार के भीतर रिक्त स्थान समर्थित हैं, जैसे {id: UInt32} और {amount:Decimal(18, 4)} में।
समर्थित ड्राइवर संस्करणों में संगतता के लिए, नाम अक्षर या अंडरस्कोर से शुरू करें और केवल अक्षर, अंक और अंडरस्कोर का उपयोग करें।
Python-शैली %s या %(name)s फ़ॉर्मेटिंग और ड्राइवर के $name$ कच्चे बाइनरी पैरामीटर समर्थित नहीं हैं। केवल query वाले कॉल अभी भी काम करते हैं। params को छोड़ना, null पास करना, या खाली ऑब्जेक्ट पास करना क्वेरी को अनबाउंड छोड़ देता है।
पैरामीटर मान JSON स्ट्रिंग्स, संख्याएँ, बूलियन, null, या सरणियाँ हो सकते हैं, बशर्ते वे घोषित ClickHouse प्रकार से मेल खाते हों:
nullप्रकार के साथNullable(...)का उपयोग करें।- JavaScript की सुरक्षित सीमा के बाहर सटीक पूर्णांक दशमलव स्ट्रिंग्स के रूप में पास करें, उदाहरण के लिए
"18446744073709551615"के साथ{id:UInt64}। दिनांक, टाइमस्टैम्प और सटीक दशमलव भी संबंधित ClickHouse प्रकार के साथ स्ट्रिंग्स के रूप में पास किए जा सकते हैं। - वेक्टर को एक सरणी के रूप में बाँधें, उदाहरण के लिए
{vector:Array(Float32)}के साथ"params": {"vector": [0.25, 0.5, 0.75]}। - सरणियों के अंदर नल स्थापित ड्राइवर पर निर्भर करते हैं। वे clickhouse-connect 1.8.0 के साथ काम करते हैं लेकिन समर्थित न्यूनतम 1.0.0 के साथ विफल होते हैं।
- JSON सूचियाँ और ऑब्जेक्ट ClickHouse
TupleऔरMapप्रकारों से बाइंड नहीं हो सकते।
अनुपलब्ध मान और असंगत प्रकार क्वेरी त्रुटियाँ लौटाते हैं। गैर-खाली params के साथ, कई अपूर्ण {name: प्लेसहोल्डर शुरुआत वाली क्वेरी अस्वीकार कर दी जाती है, जिसमें टिप्पणियों या स्ट्रिंग शाब्दिक में प्लेसहोल्डर-जैसा पाठ शामिल है।
पैरामीटरयुक्त क्वेरी अन्य क्वेरी के समान लेखन सुरक्षा, टाइमआउट, रद्दीकरण और JSON परिणाम एन्कोडिंग का उपयोग करती हैं।
पैरामीटर मान MCP सर्वर के सामान्य SQL लॉग संदेशों से बाहर रहते हैं, लेकिन MCP टूल तर्कों में बने रहते हैं और बैकएंड त्रुटियों में दिखाई दे सकते हैं। ClickHouse 26.3.20.7 system.query_log, system.processes और system.text_log में क्वेरी टेक्स्ट में मानों को प्रतिस्थापित करता है। पैरामीटर बाइंडिंग एक गोपनीयता सुविधा नहीं है और टूल कॉल में भेजे गए वेक्टर मानों की संख्या को कम नहीं करती है।
क्वेरी चलाने से पहले उसकी जाँच करना
run_query भी DESCRIBE और EXPLAIN ESTIMATE चलाता है। दोनों वैकल्पिक जाँच हैं: DESCRIBE तक पहुँचें जब आपको किसी क्वेरी के आउटपुट कॉलम और प्रकारों की आवश्यकता हो, और EXPLAIN ESTIMATE से पहले एक SELECT जो महंगा हो सकता है।
DESCRIBE (<query>) परिणाम स्कीमा का निरीक्षण करता है और DESCRIBE TABLE के समान आउटपुट-कॉलम मेटाडेटा लौटाता है:
DESCRIBE (SELECT user, sum(amt) FROM events WHERE ts > now() - INTERVAL 30 DAY GROUP BY user)
user String
sum(amt) Decimal(38, 2)
उत्तर देने के लिए ClickHouse को क्वेरी का विश्लेषण करना पड़ता है, इसलिए विश्लेषण त्रुटियाँ यहाँ सतह पर आती हैं, ClickHouse के अपने संदेश के साथ, निष्पादन के बीच में नहीं:
DESCRIBE (SELECT usr FROM events) -> Code: 47. Unknown expression identifier `usr` ... Maybe you meant: ['user']
DESCRIBE (SELECT * FROM nosuch) -> Code: 60. Unknown table expression identifier 'nosuch'
एक क्वेरी जो साफ-सुथरी वर्णन करती है वह चलने पर भी विफल हो सकती है, मेमोरी सीमा या दूरस्थ सर्वर त्रुटि पर, और यह लागत के बारे में कुछ नहीं कहती है।
EXPLAIN ESTIMATE <query> उन भागों, पंक्तियों और चिह्नों को लौटाता है जिन्हें क्वेरी पढ़ेगी, प्रति तालिका एक पंक्ति, जो एक प्राथमिक कुंजी लुकअप को पूर्ण स्कैन से अलग करती है:
EXPLAIN ESTIMATE SELECT count() FROM events WHERE id = 42
database table parts rows marks
default events 1 8192 1
वे MergeTree परिवार तालिकाओं से अनुमानित रीड्स हैं, प्राथमिक कुंजी और विभाजन छंटाई के बाद। वे रन टाइम नहीं हैं और परिणाम आकार नहीं हैं, और अन्य तालिका इंजन कवर नहीं किए गए हैं।
कोई भी कथन क्वेरी बॉडी नहीं चलाता है, लेकिन विश्लेषण हमेशा मुफ्त नहीं है: DESCRIBE (SELECT (SELECT sleep(1))) विश्लेषण करते समय स्केलर सबक्वेरी निष्पादित करता है। दोनों केवल-पढ़ने के लिए हैं और डिफ़ॉल्ट CLICKHOUSE_ALLOW_WRITE_ACCESS=false के तहत काम करते हैं। EXPLAIN ESTIMATE और DESCRIBE के लिए ClickHouse दस्तावेज़ देखें।
chDB उपकरण
run_chdb_select_query- chDB के एम्बेडेड ClickHouse इंजन का उपयोग करके SQL क्वेरी निष्पादित करें।
- इनपुट:
query(स्ट्रिंग): निष्पादित करने के लिए SQL क्वेरी। [-9007199254740991, 9007199254740991]के बाहर के पूर्णांक दशमलव स्ट्रिंग्स के रूप में लौटाए जाते हैं।- ETL प्रक्रियाओं के बिना विभिन्न स्रोतों (फ़ाइलें, URL, डेटाबेस) से सीधे डेटा क्वेरी करें।
- वैकल्पिक
chdbएक्स्ट्रा की आवश्यकता है:pip install 'mcp-clickhouse[chdb]'
स्वास्थ्य जाँच एंडपॉइंट
HTTP या SSE ट्रांसपोर्ट के साथ चलने पर, /health पर एक स्वास्थ्य जाँच एंडपॉइंट उपलब्ध है। यह एंडपॉइंट:
200 OKलौटाता है (बॉडी:OK) यदि सर्वर स्वस्थ है और ClickHouse से कनेक्ट कर सकता है503 Service Unavailableएक सामान्य त्रुटि संदेश के साथ लौटाता है यदि सर्वर ClickHouse से कनेक्ट नहीं कर सकता है503लौटाता है यदि ClickHouse प्रोब दो सेकंड के भीतर समाप्त नहीं होता है। समवर्ती अनुरोध एक इन-फ्लाइट प्रोब साझा करते हैं- पूर्ण प्रोब परिणाम को एक सेकंड के लिए पुन: उपयोग करता है, इसलिए तेज़ उत्तराधिकार में आने वाले प्रोब प्रत्येक ClickHouse से कनेक्ट नहीं होते हैं। इसलिए विफलता या पुनर्प्राप्ति एक सेकंड तक देर से रिपोर्ट की जा सकती है
एंडपॉइंट पर GET और HEAD अनुरोध जानबूझकर अनप्रमाणित हैं और Host और Origin सत्यापन से मुक्त हैं ताकि ऑर्केस्ट्रेटर प्रोब (जैसे Kubernetes liveness/readiness, लोड बैलेंसर) अतिरिक्त कॉन्फ़िगरेशन के बिना रनटाइम-असाइन किए गए पॉड या लक्ष्य IP का उपयोग कर सकें। /health आरक्षित है और MCP ट्रांसपोर्ट पथ के रूप में उपयोग नहीं किया जा सकता है। प्रतिक्रिया बॉडी जानबूझकर न्यूनतम है ताकि बैकएंड संस्करण स्ट्रिंग्स या त्रुटि विवरण लीक न हों; सर्वर लॉग के माध्यम से डीबग विफलताएँ।
उदाहरण:
curl http://localhost:8000/health
# Response: OK
सुरक्षा
HTTP/SSE ट्रांसपोर्ट के लिए प्रमाणीकरण
HTTP या SSE ट्रांसपोर्ट का उपयोग करते समय, प्रमाणीकरण डिफ़ॉल्ट रूप से आवश्यक है। stdio ट्रांसपोर्ट (डिफ़ॉल्ट) को प्रमाणीकरण की आवश्यकता नहीं है क्योंकि यह केवल मानक इनपुट/आउटपुट के माध्यम से संचार करता है।
तीन प्रमाणीकरण मोड समर्थित हैं। एक चुनें:
| मोड | कब उपयोग करें | Env var |
|---|---|---|
| स्थिर बियरर टोकन | सरल परिनियोजन, आंतरिक सेवाएँ | CLICKHOUSE_MCP_AUTH_TOKEN |
| OAuth / OIDC (FastMCP के माध्यम से) | Azure Entra, Google, GitHub, WorkOS, आदि। | FASTMCP_SERVER_AUTH=<provider-class-path> (+ प्रदाता-विशिष्ट FASTMCP_SERVER_AUTH_* vars) |
| अक्षम | केवल स्थानीय विकास | CLICKHOUSE_MCP_AUTH_DISABLED=true |
HTTP/SSE ट्रांसपोर्ट के लिए इनमें से कोई भी कॉन्फ़िगर न होने पर स्टार्टअप विफल हो जाता है।
प्रमाणीकरण सेट करना
-
एक सुरक्षित टोकन उत्पन्न करें (कोई भी यादृच्छिक स्ट्रिंग हो सकता है):
# Using uuidgen (macOS/Linux) uuidgen # Using openssl openssl rand -hex 32 -
टोकन के साथ सर्वर कॉन्फ़िगर करें:
export CLICKHOUSE_MCP_AUTH_TOKEN="your-generated-token" -
अपने MCP क्लाइंट को अनुरोधों में टोकन शामिल करने के लिए कॉन्फ़िगर करें:
HTTP/SSE ट्रांसपोर्ट के साथ Claude Desktop के लिए:
{ "mcpServers": { "mcp-clickhouse": { "url": "http://127.0.0.1:8000", "headers": { "Authorization": "Bearer your-generated-token" } } } }नोट:
/healthएंडपॉइंट जानबूझकर अनप्रमाणित है (ऊपर स्वास्थ्य जाँच एंडपॉइंट देखें)। यह सत्यापित करने के लिए कि बियरर-टोकन प्रमाणीकरण वास्तव में अनप्रमाणित अनुरोधों को अस्वीकार कर रहा है, MCP एंडपॉइंट को ही हिट करें जैसे MCP Inspector के साथ, या/mcpपरAuthorizationहेडर के साथ और बिना JSON-RPC अनुरोध POST करके और पुष्टि करें कि अनप्रमाणित कॉल401लौटाता है।
FastMCP के माध्यम से OAuth / OIDC
पहचान प्रदाताओं (Azure Entra, Google, GitHub, WorkOS, आदि) के साथ उत्पादन परिनियोजन के लिए, स्थिर टोकन का उपयोग करने के बजाय FastMCP के अंतर्निहित प्रमाणीकरण प्रदाताओं को प्रमाणीकरण सौंपें। FASTMCP_SERVER_AUTH को FastMCP प्रमाणीकरण प्रदाता के पूर्ण क्लास पथ पर सेट करें, प्रदाता-विशिष्ट FASTMCP_SERVER_AUTH_* चर के साथ, और CLICKHOUSE_MCP_AUTH_TOKEN अनसेट छोड़ दें।
उदाहरण (Azure Entra):
export FASTMCP_SERVER_AUTH=fastmcp.server.auth.providers.azure.AzureProvider
export FASTMCP_SERVER_AUTH_AZURE_TENANT_ID="<tenant-id>"
export FASTMCP_SERVER_AUTH_AZURE_CLIENT_ID="<client-id>"
export FASTMCP_SERVER_AUTH_AZURE_CLIENT_SECRET="<client-secret>"
export FASTMCP_SERVER_AUTH_AZURE_BASE_URL="https://mcp.example.com"
export FASTMCP_SERVER_AUTH_AZURE_REQUIRED_SCOPES="read access_as_user"
mcp-clickhouse FastMCP 4.0.0 अंतर्निहित प्रदाताओं के लिए इन FastMCP 2.14.7 पर्यावरण उपसर्गों को बनाए रखता है:
| प्रदाता क्लास पथ | प्रदाता चर उपसर्ग |
|---|---|
fastmcp.server.auth.providers.auth0.Auth0Provider | FASTMCP_SERVER_AUTH_AUTH0_ |
fastmcp.server.auth.providers.aws.AWSCognitoProvider | FASTMCP_SERVER_AUTH_AWS_COGNITO_ |
fastmcp.server.auth.providers.azure.AzureProvider | FASTMCP_SERVER_AUTH_AZURE_ |
fastmcp.server.auth.providers.descope.DescopeProvider | FASTMCP_SERVER_AUTH_DESCOPEPROVIDER_ |
fastmcp.server.auth.providers.discord.DiscordProvider | FASTMCP_SERVER_AUTH_DISCORD_ |
fastmcp.server.auth.providers.github.GitHubProvider | FASTMCP_SERVER_AUTH_GITHUB_ |
fastmcp.server.auth.providers.google.GoogleProvider | FASTMCP_SERVER_AUTH_GOOGLE_ |
fastmcp.server.auth.providers.introspection.IntrospectionTokenVerifier | FASTMCP_SERVER_AUTH_INTROSPECTION_ |
fastmcp.server.auth.providers.jwt.JWTVerifier | FASTMCP_SERVER_AUTH_JWT_ |
fastmcp.server.auth.providers.oci.OCIProvider | FASTMCP_SERVER_AUTH_OCI_ |
fastmcp.server.auth.providers.scalekit.ScalekitProvider | FASTMCP_SERVER_AUTH_SCALEKITPROVIDER_ |
fastmcp.server.auth.providers.supabase.SupabaseProvider | FASTMCP_SERVER_AUTH_SUPABASE_ |
fastmcp.server.auth.providers.workos.WorkOSProvider | FASTMCP_SERVER_AUTH_WORKOS_ |
fastmcp.server.auth.providers.workos.AuthKitProvider | FASTMCP_SERVER_AUTH_AUTHKITPROVIDER_ |
उपसर्ग में अपरकेस प्रदाता फ़ील्ड नाम जोड़ें। प्रत्येक प्रदाता के कॉन्फ़िगरेशन आवश्यकताओं के लिए FastMCP दस्तावेज़ देखें।
प्रक्रिया पर्यावरण में सीधे सेट किए गए प्रमाणीकरण मान केस-असंवेदनशील रूप से प्राथमिकता लेते हैं।
डिफ़ॉल्ट .env लोड स्थापित mcp_clickhouse पैकेज निर्देशिका से शुरू होता है,
पहले सिमलिंक हल करता है, और फाइलसिस्टम रूट तक ऊपर की ओर बढ़ता है। यह पहला
.env लोड करता है जो उसे मिलता है और यदि कोई नहीं है तो कुछ भी लोड नहीं करता। यह कभी भी कार्यशील
निर्देशिका नहीं पढ़ता, चाहे सर्वर कैसे भी लॉन्च किया गया हो। एक स्रोत चेकआउट सामान्यतः
रिपॉजिटरी रूट .env ढूंढता है। वह फ़ाइल FASTMCP_SERVER_AUTH और उसके
प्रदाता फ़ील्ड भी प्रदान कर सकती है। इसके मान स्पष्ट या संगतता प्रमाणीकरण
फ़ाइल पर प्राथमिकता लेते हैं।
FastMCP 2 संगतता के लिए, mcp-clickhouse कार्यशील निर्देशिका में .env से लापता प्रदाता फ़ील्ड पढ़ता है,
लेकिन वह संगतता फ़ॉलबैक FASTMCP_SERVER_AUTH का चयन नहीं कर सकता। एक प्रक्रिया-सेट FASTMCP_ENV_FILE उस संगतता
फ़ॉलबैक को प्रतिस्थापित करता है और चयनकर्ता और प्रदाता दोनों फ़ील्ड प्रदान कर सकता है। इसे स्टार्टअप से पहले सेट करें।
mcp-clickhouse संगतता लोडर उस फ़ाइल से केवल FASTMCP_SERVER_AUTH और
FASTMCP_SERVER_AUTH_* पढ़ता है, इसलिए यह CLICKHOUSE_* सेटिंग्स इंजेक्ट नहीं कर सकता।
FastMCP 4 अपनी व्यापक सेटिंग्स के लिए उसी फ़ाइल का उपयोग कर सकता है। एक कस्टम प्रदाता को
पर्यावरण-व्युत्पन्न कंस्ट्रक्टर तर्क नहीं मिलते और उसे बिना-तर्क निर्माण का समर्थन करना चाहिए।
खोजी गई और कार्यशील-निर्देशिका दोनों .env फ़ाइलों को विश्वसनीय प्रमाणीकरण कॉन्फ़िगरेशन मानें।
कोई भी जो पैकेज निर्देशिका से फाइलसिस्टम रूट तक किसी भी निर्देशिका में .env बना या लिख सकता है,
वह नियंत्रित कर सकता है कि कौन सी फ़ाइल खोजी जाती है, प्रदाता का चयन कर सकता है, और उसके फ़ील्ड सेट कर सकता है।
कोई भी जो कार्यशील-निर्देशिका फ़ाइल लिख सकता है, वह प्रक्रिया और खोजी गई कॉन्फ़िगरेशन से अनुपस्थित हर प्रदाता
फ़ील्ड को नियंत्रित करता है, जिसमें हस्ताक्षर कुंजियाँ, जारीकर्ता और एंडपॉइंट, और क्लाइंट रहस्य शामिल हैं। एक प्रक्रिया-सेट FASTMCP_ENV_FILE जो
ऑपरेटर-स्वामित्व वाली फ़ाइल की ओर इशारा करता है, कार्यशील-निर्देशिका फ़ॉलबैक को अक्षम करता है।
FastMCP 4 ने डिफ़ॉल्ट OAuth प्रॉक्सी क्लाइंट स्टोर बदल दिया। जो परिनियोजन FastMCP 2 के डिफ़ॉल्ट OAuth प्रॉक्सी स्टोरेज पर निर्भर थे, उन्हें क्लाइंट को फिर से पंजीकृत और अधिकृत कराना होगा। संगत कस्टम स्टोरेज, स्थिर बियरर टोकन, और JWT सत्यापन अप्रभावित हैं।
विकास मोड (प्रमाणीकरण अक्षम करना)
केवल स्थानीय विकास और परीक्षण के लिए, आप निम्न सेट करके प्रमाणीकरण अक्षम कर सकते हैं:
export CLICKHOUSE_MCP_AUTH_DISABLED=true
export CLICKHOUSE_MCP_ALLOWED_HOSTS=127.0.0.1:8000,localhost:8000
चेतावनी: इसका उपयोग केवल स्थानीय विकास के लिए करें। जब सर्वर किसी नेटवर्क के संपर्क में हो तो प्रमाणीकरण अक्षम न करें।
कॉन्फ़िगरेशन
यह MCP सर्वर ClickHouse और chDB दोनों का समर्थन करता है। आप अपनी आवश्यकताओं के अनुसार एक या दोनों सक्षम कर सकते हैं। Python 3.10 से 3.14 समर्थित हैं। स्थानीय लॉन्च के लिए Python 3.12 अनुशंसित है।
-
निम्न स्थान पर स्थित Claude Desktop कॉन्फ़िगरेशन फ़ाइल खोलें:
- macOS पर:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows पर:
%APPDATA%/Claude/claude_desktop_config.json
- macOS पर:
-
निम्न जोड़ें:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.12",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_ROLE": "<clickhouse-role>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30"
}
}
}
}
अपने स्वयं के ClickHouse सेवा की ओर इंगित करने के लिए पर्यावरण चर अपडेट करें।
या, यदि आप ClickHouse SQL Playground के साथ इसे आज़माना चाहते हैं, तो आप निम्न कॉन्फ़िगरेशन का उपयोग कर सकते हैं:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.12",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "sql-clickhouse.clickhouse.com",
"CLICKHOUSE_PORT": "8443",
"CLICKHOUSE_USER": "demo",
"CLICKHOUSE_PASSWORD": "",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30"
}
}
}
}
chDB (एम्बेडेड ClickHouse इंजन) के लिए, निम्न कॉन्फ़िगरेशन जोड़ें:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse[chdb]",
"--python",
"3.12",
"mcp-clickhouse"
],
"env": {
"CHDB_ENABLED": "true",
"CLICKHOUSE_ENABLED": "false",
"CHDB_DATA_PATH": "/path/to/chdb/data"
}
}
}
}
आप ClickHouse और chDB दोनों को एक साथ भी सक्षम कर सकते हैं:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse[chdb]",
"--python",
"3.12",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30",
"CHDB_ENABLED": "true",
"CHDB_DATA_PATH": "/path/to/chdb/data"
}
}
}
}
-
uvके लिए कमांड प्रविष्टि ढूंढें और इसेuvनिष्पादन योग्य के पूर्ण पथ से बदलें। यह सुनिश्चित करता है कि सर्वर शुरू करते समयuvका सही संस्करण उपयोग किया जाए। मैक पर, आपwhich uvका उपयोग करके यह पथ पा सकते हैं। -
परिवर्तन लागू करने के लिए Claude Desktop को पुनरारंभ करें।
वैकल्पिक लेखन पहुंच
डिफ़ॉल्ट रूप से, यह MCP केवल-पढ़ने वाले क्वेरी लागू करता है ताकि अन्वेषण के दौरान आकस्मिक परिवर्तन न हो सकें। DDL या INSERT स्टेटमेंट की अनुमति देने के लिए, CLICKHOUSE_ALLOW_WRITE_ACCESS पर्यावरण चर को true पर सेट करें। यदि ClickHouse इंस्टेंस स्वयं लेखन को अक्षम करता है तो सर्वर केवल-पढ़ने मोड लागू करता रहता है।
केवल-पढ़ने मोड अभी भी ClickHouse उपयोगकर्ता को अपनी स्वयं की क्वेरी रद्द करने की अनुमति देता है, जिसमें समान उपयोगकर्ता का उपयोग करने वाले अन्य कनेक्शनों की क्वेरी शामिल हैं। केवल-पढ़ने मोड में भी एक समर्पित ClickHouse उपयोगकर्ता का उपयोग करें। उन कार्यभारों के लिए अलग ClickHouse उपयोगकर्ताओं का उपयोग करें जिन्हें एक-दूसरे की क्वेरी रद्द नहीं करनी चाहिए।
विनाशकारी संचालन सुरक्षा
यहां तक कि जब लेखन पहुंच सक्षम हो (CLICKHOUSE_ALLOW_WRITE_ACCESS=true), विनाशकारी संचालन के लिए सुरक्षा हेतु एक अतिरिक्त ऑप्ट-इन फ़्लैग की आवश्यकता होती है। जांच किसी भी DROP स्टेटमेंट (ALTER TABLE ... DROP PARTITION / DROP PART / DROP COLUMN खंडों सहित), किसी भी TRUNCATE, DELETE और UPDATE (हल्के स्टेटमेंट और ALTER TABLE ... DELETE / ALTER TABLE ... UPDATE म्यूटेशन दोनों), REPLACE TABLE, CREATE OR REPLACE, ALTER TABLE ... REPLACE PARTITION, ALTER TABLE ... CLEAR COLUMN / CLEAR INDEX / CLEAR PROJECTION, और DETACH ... PERMANENTLY को कवर करती है। स्ट्रिंग लिटरल, उद्धृत पहचानकर्ता, SQL टिप्पणियों और {name:Type} पैरामीटर नामों के अंदर कीवर्ड को अनदेखा किया जाता है, इसलिए वे जांच को ट्रिगर नहीं करते और न ही किसी स्टेटमेंट को उससे छिपाते हैं।
यह जांच MCP सर्वर में चलती है और दुर्घटनाओं के खिलाफ एक सर्वोत्तम-प्रयास गार्ड है। यह एक सुरक्षा सीमा नहीं है। सुरक्षा सीमा ClickHouse उपयोगकर्ता की अनुदान है। केवल-पढ़ने मोड (डिफ़ॉल्ट) readonly=1 के माध्यम से सर्वर-साइड लागू किया जाता है। विनाशकारी-संचालन गेट सर्वर-लागू नहीं है।
लेखन मोड के लिए, MCP सर्वर को केवल उन्हीं विशेषाधिकारों वाला एक समर्पित ClickHouse उपयोगकर्ता दें जिनकी उसे आवश्यकता है:
CREATE USER mcp_agent IDENTIFIED BY '...';
GRANT SELECT, INSERT, CREATE TABLE, ALTER ADD COLUMN ON mydb.* TO mcp_agent;
इन अनुदानों के बाहर विशेषाधिकारों की आवश्यकता वाले डेटा-परिवर्तन संचालन MCP फ़्लैग की परवाह किए बिना ACCESS_DENIED के साथ सर्वर-साइड विफल हो जाते हैं। सर्वर सेटिंग्स max_table_size_to_drop और max_partition_size_to_drop भी सेटिंग्स बाधाओं के साथ पिन किए जाने पर प्रभाव दायरा सीमित कर सकती हैं।
विनाशकारी संचालन सक्षम करने के लिए, दोनों फ़्लैग सेट करें:
"env": {
"CLICKHOUSE_ALLOW_WRITE_ACCESS": "true",
"CLICKHOUSE_ALLOW_DROP": "true"
}
यह दो-स्तरीय दृष्टिकोण आकस्मिक विलोपन को कठिन बनाता है:
- लेखन संचालन (INSERT, CREATE, ALTER ADD COLUMN) के लिए
CLICKHOUSE_ALLOW_WRITE_ACCESS=trueआवश्यक है - विनाशकारी संचालन (DROP, TRUNCATE, DELETE, UPDATE, और उपरोक्त सूची के बाकी) के लिए अतिरिक्त रूप से
CLICKHOUSE_ALLOW_DROP=trueआवश्यक है
uv के बिना चलाना (सिस्टम Python का उपयोग करके)
यदि आप uv के बजाय सिस्टम Python इंस्टॉलेशन का उपयोग करना पसंद करते हैं, तो आप PyPI से पैकेज इंस्टॉल कर सकते हैं और इसे सीधे चला सकते हैं:
-
pip का उपयोग करके पैकेज इंस्टॉल करें:
python3 -m pip install mcp-clickhousechDB समर्थन भी इंस्टॉल करने के लिए:
python3 -m pip install 'mcp-clickhouse[chdb]'नवीनतम संस्करण में अपग्रेड करने के लिए:
python3 -m pip install --upgrade mcp-clickhouse -
Python का सीधे उपयोग करने के लिए अपना Claude Desktop कॉन्फ़िगरेशन अपडेट करें:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "python3",
"args": [
"-m",
"mcp_clickhouse.main"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30"
}
}
}
}
वैकल्पिक रूप से, आप इंस्टॉल की गई स्क्रिप्ट का सीधे उपयोग कर सकते हैं:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "mcp-clickhouse",
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_PORT": "<clickhouse-port>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_VERIFY": "true",
"CLICKHOUSE_CONNECT_TIMEOUT": "30"
}
}
}
}
नोट: यदि वे आपके सिस्टम PATH में नहीं हैं तो Python निष्पादन योग्य या mcp-clickhouse स्क्रिप्ट का पूर्ण पथ उपयोग करना सुनिश्चित करें। आप पथ निम्न का उपयोग करके पा सकते हैं:
- Python निष्पादन योग्य के लिए
which python3 - इंस्टॉल की गई स्क्रिप्ट के लिए
which mcp-clickhouse
कस्टम मिडलवेयर
आप स्रोत कोड को संशोधित किए बिना MCP सर्वर में कस्टम मिडलवेयर जोड़ सकते हैं। FastMCP एक मिडलवेयर सिस्टम प्रदान करता है जो आपको MCP प्रोटोकॉल संदेशों (टूल कॉल, संसाधन रीड, प्रॉम्प्ट, आदि) को इंटरसेप्ट और प्रोसेस करने की अनुमति देता है।
उपयोग कैसे करें
Middlewareका विस्तार करने वाले मिडलवेयर क्लास और एकsetup_middleware(mcp)फ़ंक्शन के साथ एक Python मॉड्यूल बनाएं:
# my_middleware.py
import logging
from fastmcp.server.middleware import Middleware, MiddlewareContext, CallNext
logger = logging.getLogger("my-middleware")
class LoggingMiddleware(Middleware):
"""Log all tool calls."""
async def on_call_tool(self, context: MiddlewareContext, call_next: CallNext):
tool_name = context.message.name if hasattr(context.message, 'name') else 'unknown'
logger.info(f"Calling tool: {tool_name}")
result = await call_next(context)
logger.info(f"Tool {tool_name} completed")
return result
def setup_middleware(mcp):
"""Register middleware with the MCP server."""
mcp.add_middleware(LoggingMiddleware())
MCP_MIDDLEWARE_MODULEपर्यावरण चर को मॉड्यूल नाम पर सेट करें (बिना.pyएक्सटेंशन के):
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": ["run", "--with", "mcp-clickhouse", "--python", "3.12", "mcp-clickhouse"],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"MCP_MIDDLEWARE_MODULE": "my_middleware"
}
}
}
}
- सुनिश्चित करें कि आपका मिडलवेयर मॉड्यूल Python के आयात पथ में है (उदाहरण के लिए, उसी निर्देशिका में जहां MCP सर्वर चलता है, या पैकेज के रूप में इंस्टॉल किया गया है)।
उदाहरण मिडलवेयर
example_middleware.py में एक उदाहरण मिडलवेयर मॉड्यूल प्रदान किया गया है जो सामान्य पैटर्न दिखाता है:
- सभी MCP अनुरोधों की लॉगिंग
- विशेष रूप से टूल कॉल की लॉगिंग
- अनुरोध प्रसंस्करण समय मापना
उदाहरण का उपयोग करने के लिए:
"env": {
"MCP_MIDDLEWARE_MODULE": "example_middleware"
}
मिडलवेयर क्षमताएं
Middleware बेस क्लास विभिन्न MCP संचालन के लिए हुक प्रदान करता है:
on_message(context, call_next)- सभी संदेशों के लिए कहा जाता हैon_request(context, call_next)- सभी अनुरोधों के लिए कहा जाता हैon_notification(context, call_next)- सभी अधिसूचनाओं के लिए कहा जाता हैon_call_tool(context, call_next)- जब एक टूल निष्पादित होता है तो कहा जाता हैon_read_resource(context, call_next)- जब एक संसाधन पढ़ा जाता है तो कहा जाता हैon_get_prompt(context, call_next)- जब एक प्रॉम्प्ट प्राप्त किया जाता है तो कहा जाता हैon_list_tools(context, call_next)- टूल सूचीबद्ध करते समय कहा जाता हैon_list_resources(context, call_next)- संसाधन सूचीबद्ध करते समय कहा जाता हैon_list_resource_templates(context, call_next)- संसाधन टेम्पलेट सूचीबद्ध करते समय कहा जाता हैon_list_prompts(context, call_next)- प्रॉम्प्ट सूचीबद्ध करते समय कहा जाता है
प्रत्येक हुक को संदेश और मेटाडेटा युक्त एक MiddlewareContext ऑब्जेक्ट और पाइपलाइन जारी रखने के लिए एक call_next फ़ंक्शन प्राप्त होता है।
कॉन्टेक्स्ट स्टेट के माध्यम से गतिशील क्लाइंट कॉन्फ़िगरेशन
मिडलवेयर CLIENT_CONFIG_OVERRIDES_KEY कॉन्टेक्स्ट स्टेट कुंजी का उपयोग करके प्रति-अनुरोध आधार पर ClickHouse क्लाइंट कॉन्फ़िगरेशन को ओवरराइड कर सकता है। सर्वर इन ओवरराइड को पर्यावरण चर से बेस कॉन्फ़िगरेशन के साथ मर्ज करता है।
from fastmcp.server.dependencies import get_context
from fastmcp.server.middleware import CallNext, Middleware, MiddlewareContext
from mcp_clickhouse.mcp_server import CLIENT_CONFIG_OVERRIDES_KEY
class ClientConfigMiddleware(Middleware):
async def on_call_tool(self, context: MiddlewareContext, call_next: CallNext):
ctx = get_context()
await ctx.set_state(
CLIENT_CONFIG_OVERRIDES_KEY,
{
"connect_timeout": 60,
"send_receive_timeout": 120,
},
serializable=False,
)
return await call_next(context)
यह गतिशील टाइमआउट समायोजन, टेनेंट-विशिष्ट रूटिंग, या प्रति-उपयोगकर्ता कनेक्शन सेटिंग्स जैसे उन्नत उपयोग मामलों को सक्षम करता है।
स्टेट मान एक शब्दकोश होना चाहिए। नेस्टेड settings और generic_args मान
मैपिंग होने चाहिए और बेस कॉन्फ़िगरेशन के साथ मर्ज किए जाते हैं। अमान्य मान ClickHouse
क्लाइंट बनाने से पहले टूल कॉल को विफल कर देते हैं। CLICKHOUSE_ROLE तब तक सक्रिय रहता है जब तक ओवरराइड स्पष्ट रूप से
settings.role प्रदान नहीं करता। शीर्ष-स्तरीय role और ch_role कुंजियाँ, साथ ही generic_args के अंतर्गत समान कुंजियाँ,
अस्वीकार कर दी जाती हैं।
verify, ca_cert, client_cert, client_cert_key, tls_mode, server_host_name,
और pool_mgr को केवल शीर्ष-स्तरीय ओवरराइड के रूप में सेट करें। उन्हें generic_args के अंतर्गत नेस्ट नहीं किया जा सकता। एक
कस्टम pool_mgr को प्रबंधित CA या क्लाइंट प्रमाणपत्र सेटिंग्स के साथ नहीं जोड़ा जा सकता। DSN क्वेरी
पैरामीटर इन कुंजियों को सेट नहीं कर सकते, और एक DSN chdb बैकएंड का चयन नहीं कर सकता। कनेक्शन बदलने के लिए स्पष्ट
शीर्ष-स्तरीय host, port, username, password, database, और secure ओवरराइड का उपयोग करें।
एक अग्रेषित DSN भरे हुए बेस कनेक्शन फ़ील्ड को प्रतिस्थापित नहीं करता या TLS का चयन नहीं करता।
यह खाली फ़ील्ड भर सकता है और query_limit जैसे समर्थित क्वेरी पैरामीटर प्रदान कर सकता है।
secure और verify ओवरराइड बूलियन या स्ट्रिंग true और false स्वीकार करते हैं।
verify भी proxy स्वीकार करता है, जो tls_mode अनसेट होने पर
tls_mode: proxy की तरह व्यवहार करता है और इसलिए पर्यावरण पासवर्ड के साथ बेसिक प्रमाणीकरण का उपयोग करता है। एक secure ओवरराइड मेल खाते https या http इंटरफ़ेस का चयन करता है और
पोर्ट नहीं बदलता। एक स्पष्ट interface ओवरराइड http या https होना चाहिए और secure के साथ सहमत होना चाहिए।
ओवरराइड मर्ज करने के बाद, डिफ़ॉल्ट और mutual क्लाइंट प्रमाणपत्र मोड पासवर्ड छोड़ देते हैं। proxy और strict मोड पर्यावरण पासवर्ड के साथ बेसिक प्रमाणीकरण का उपयोग करते हैं
जब तक ओवरराइड अपनी स्वयं की क्रेडेंशियल प्रदान नहीं करता।
इन ओवरराइड को विश्वसनीय मिडलवेयर इनपुट मानें। मिडलवेयर को सेट करने से पहले अनुरोध-व्युत्पन्न मानों को प्रमाणित और अधिकृत करना चाहिए। serializable=False का उपयोग करें ताकि FastMCP मान को अनुरोध-स्थानीय स्टेट में रखे। डिफ़ॉल्ट serializable=True सत्र स्टेट संग्रहीत करता है और
सर्वर द्वारा अस्वीकार कर दिया जाता है। सर्वर ब्लॉकिंग डेटाबेस कार्य भेजने से पहले मान का स्नैपशॉट लेता है।
टेनेंट डेटा को सत्र-स्कोप्ड कॉन्टेक्स्ट स्टेट में संग्रहीत न करें। एक अस्वीकृत सत्र-स्कोप्ड
ओवरराइड एक विरासत MCP सत्र से जुड़ा रहता है और उस सत्र में बाद के टूल कॉल को विफल कर देता है
जब तक क्लाइंट पुनः कनेक्ट नहीं होता। एक प्रति-अनुरोध ClickHouse भूमिका कनेक्शन कॉन्फ़िगरेशन है,
टेनेंट प्राधिकरण सीमा नहीं। ClickHouse उपयोगकर्ताओं, भूमिकाओं और अनुदानों के साथ टेनेंट अलगाव लागू करें।
विकास
-
test-servicesनिर्देशिका में ClickHouse क्लस्टर शुरू करने के लिएdocker compose up -dचलाएं। -
रिपॉजिटरी के रूट में एक
.envफ़ाइल में निम्न चर जोड़ें।
नोट: इस संदर्भ में default उपयोगकर्ता का उपयोग केवल स्थानीय विकास उद्देश्यों के लिए है।
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
-
निर्भरताएँ स्थापित करने के लिए
uv syncचलाएँ।uvस्थापित करने के लिए यहाँ दिए गए निर्देशों का पालन करें। फिरsource .venv/bin/activateकरें। -
MCP Inspector के साथ आसान परीक्षण के लिए, MCP सर्वर शुरू करने हेतु
uv run fastmcp dev inspector mcp_clickhouse/mcp_server.py:mcpचलाएँ। -
HTTP ट्रांसपोर्ट और हेल्थ चेक एंडपॉइंट के साथ परीक्षण करने के लिए:
# For development, disable authentication CLICKHOUSE_MCP_SERVER_TRANSPORT=http CLICKHOUSE_MCP_AUTH_DISABLED=true CLICKHOUSE_MCP_ALLOWED_HOSTS=127.0.0.1:8000,localhost:8000 python -m mcp_clickhouse.main # Or with authentication (generate a token first) CLICKHOUSE_MCP_SERVER_TRANSPORT=http CLICKHOUSE_MCP_AUTH_TOKEN="your-token" python -m mcp_clickhouse.main # Then in another terminal: curl http://localhost:8000/health
कोड लेआउट
पैकेज एक फ्लैट मॉड्यूल लेआउट का उपयोग करता है। सर्वर असेंबली और पंजीकरण के लिए mcp_server.py से शुरू करें, फिर कार्यान्वयन को उसके स्वामित्व वाले मॉड्यूल में अनुसरण करें।
| मॉड्यूल | जिम्मेदारी |
|---|---|
| mcp_server.py, main.py | स्टार्टअप असेंबली, टूल और प्रॉम्प्ट पंजीकरण, शटडाउन समन्वय, और CLI स्टार्टअप |
| clients.py | अनुरोध कॉन्फ़िगरेशन, कैश्ड ClickHouse कनेक्शन, और क्लाइंट लीज़ |
| queries.py | क्वेरी निष्पादन, रद्दीकरण, और विनाशकारी-संचालन गार्ड |
| metadata.py | डेटाबेस और तालिका खोज, मेटाडेटा मॉडल, और पेजिनेशन |
| chdb_backend.py, chdb_prompt.py | वैकल्पिक chDB आरंभीकरण, क्वेरी निष्पादन, और प्रॉम्प्ट सामग्री |
| health.py, executors.py | हेल्थ प्रोब और कैशिंग, और सर्वर संचालन द्वारा उपयोग किए जाने वाले वर्कर पूल |
| auth.py, transport.py, http_security.py | Dotenv लोडिंग, प्रमाणीकरण, HTTP/SSE ऐप निर्माण, और Host/Origin सत्यापन |
| mcp_env.py, serialization.py | पर्यावरण कॉन्फ़िगरेशन और JSON परिणाम एन्कोडिंग |
| mcp_middleware_hook.py, skills_advisor.py | कस्टम मिडलवेयर लोडिंग और सर्वर निर्देश |
प्रत्येक सर्वर असेंबली अपने वर्कर पूल, क्लाइंट कैश, सक्रिय क्वेरी, पेजिनेशन कैश, हेल्थ स्थिति, और chDB बैकएंड का स्वामित्व रखती है। वर्कर और क्लाइंट क्लीनअप प्रक्रिया निकास पर चलता है। पैकेज आयात डिफ़ॉल्ट सर्वर को आरंभ करता है, जिसमें किसी निकाले गए मॉड्यूल को पहली बार आयात करना भी शामिल है।
परीक्षणों में, उस मॉड्यूल या स्वामी उदाहरण को पैच करें जहाँ कोड किसी निर्भरता को पढ़ता है। उदाहरण के लिए, क्लाइंट निर्माण के लिए mcp_clickhouse.clients.clickhouse_connect.get_client को पैच करें। mcp_server.py में संगतता आयात उन बाइंडिंग्स से अलग हो सकते हैं जिनका उपयोग कोई कार्यान्वयन करता है।
पर्यावरण चर
कॉन्फ़िगरेशन स्वतंत्र समूहों में विभाजित है। इन्हें मिलाना कठिन-से-डीबग कनेक्शन विफलताओं का एक सामान्य कारण है:
| समूह | चर | नियंत्रण |
|---|---|---|
| ClickHouse डेटाबेस कनेक्शन | CLICKHOUSE_HOST, CLICKHOUSE_PORT, CLICKHOUSE_SECURE, CLICKHOUSE_VERIFY, प्रमाणपत्र चर | यह MCP सर्वर आपके ClickHouse क्लस्टर से HTTP इंटरफ़ेस पर कैसे जुड़ता है |
| MCP सर्वर / ट्रांसपोर्ट | CLICKHOUSE_MCP_*, FASTMCP_SERVER_AUTH, FASTMCP_SERVER_AUTH_*, FASTMCP_ENV_FILE | MCP ट्रांसपोर्ट, प्रमाणीकरण, और क्वेरी-टूल निष्पादन सीमाएँ |
| मिडलवेयर / chDB | MCP_MIDDLEWARE_MODULE, CHDB_* | वैकल्पिक एक्सटेंशन |
[!IMPORTANT]
CLICKHOUSE_SECURE,CLICKHOUSE_VERIFY,CLICKHOUSE_CA_CERT,CLICKHOUSE_CLIENT_CERT,CLICKHOUSE_CLIENT_CERT_KEY,CLICKHOUSE_TLS_MODE, औरCLICKHOUSE_PORTकेवल आउटबाउंड ClickHouse डेटाबेस कनेक्शन पर लागू होते हैं। ये इनबाउंड MCP HTTP/SSE एंडपॉइंट के लिए TLS, क्लाइंट प्रमाणपत्र, पोर्ट, या प्रमाणीकरण कॉन्फ़िगर नहीं करते हैं।उदाहरण: यदि MCP सर्वर Kubernetes में एक इनग्रेस के पीछे चलता है जो TLS समाप्त करता है, तो यह एक MCP ट्रांसपोर्ट चिंता है।
CLICKHOUSE_SECUREको इस बात के साथ संरेखित रखें कि पॉड स्वयं ClickHouse तक कैसे पहुँचता है (HTTPS →true, सादा HTTP →false)।CLICKHOUSE_SECURE=falseको केवल इसलिए सेट करना क्योंकि MCP सर्वर एक इनग्रेस के पीछे है, सर्वर को ClickHouse पर HTTP के माध्यम से डायल करने के लिए प्रेरित करेगा—अक्सर केवल-HTTPS पोर्ट के विरुद्ध—और सर्वर लॉग में अस्पष्ट HTTP/TLS त्रुटियाँ उत्पन्न करेगा।
ClickHouse डेटाबेस कनेक्शन
ये चर clickhouse-connect HTTP क्लाइंट और ClickHouse-समर्थित टूल जैसे run_query, list_databases, और list_tables के व्यवहार को कॉन्फ़िगर करते हैं।
mcp-clickhouse को clickhouse-connect 1.x चाहिए, जो 1.0.0 से शुरू होता है।
आवश्यक चर
CLICKHOUSE_HOST: आपके ClickHouse सर्वर का होस्टनाम (डेटाबेस एंडपॉइंट, MCP सर्वर बाइंड पता नहीं)CLICKHOUSE_USER: ClickHouse प्रमाणीकरण के लिए उपयोगकर्ता नामCLICKHOUSE_PASSWORD: ClickHouse प्रमाणीकरण के लिए पासवर्ड- आवश्यक है जब तक कि
CLICKHOUSE_CLIENT_CERTडिफ़ॉल्ट या"mutual"TLS मोड का उपयोग न करे - डिफ़ॉल्ट या
"mutual"मोड में, प्रमाणपत्र प्रमाणीकरण का उपयोग किया जाता है और पासवर्ड नहीं भेजा जाता है
- आवश्यक है जब तक कि
[!CAUTION] अपने MCP डेटाबेस उपयोगकर्ता को उसी तरह व्यवहार करना महत्वपूर्ण है जैसे आप अपने डेटाबेस से जुड़ने वाले किसी भी बाहरी क्लाइंट के साथ करते हैं, केवल उसके संचालन के लिए आवश्यक न्यूनतम विशेषाधिकार प्रदान करते हैं। डिफ़ॉल्ट या प्रशासनिक उपयोगकर्ताओं का उपयोग हर समय सख्ती से टाला जाना चाहिए।
वैकल्पिक चर
CLICKHOUSE_PORT: आपके ClickHouse सर्वर का HTTP इंटरफ़ेस पोर्ट- डिफ़ॉल्ट:
8443यदिCLICKHOUSE_SECURE=true,8123यदिCLICKHOUSE_SECURE=false - आमतौर पर सेट करने की आवश्यकता नहीं होती जब तक कि गैर-मानक पोर्ट का उपयोग न किया जा रहा हो
- HTTP इंटरफ़ेस पोर्ट होना चाहिए,
clickhouse-clientद्वारा उपयोग किया जाने वाला नेटिव TCP प्रोटोकॉल पोर्ट नहीं - सामान्य मान:
- HTTP:
8123(सादा) /8443(TLS) — इस सर्वर और ClickHouse Cloud HTTPS द्वारा उपयोग किया जाता है - नेटिव TCP (यहाँ समर्थित नहीं):
9000(सादा) /9440(TLS) —clickhouse-clientद्वारा उपयोग किया जाता है
- HTTP:
- यदि सर्वर
Port 9000 is for clickhouse-client programके साथ प्रतिक्रिया करता है, तो आप नेटिव प्रोटोकॉल की ओर इंगित हैं; HTTP पोर्ट पर स्विच करें (8123/8443या आपके डिप्लॉयमेंट का HTTP मैपिंग)
- डिफ़ॉल्ट:
CLICKHOUSE_ROLE: प्रमाणीकरण के लिए उपयोग करने के लिए ClickHouse भूमिका- डिफ़ॉल्ट: कोई नहीं
- इसे सेट करें यदि आपके उपयोगकर्ता को एक विशिष्ट भूमिका की आवश्यकता है
CLICKHOUSE_SECURE: ClickHouse डेटाबेस कनेक्शन के लिए HTTPS सक्षम करें (MCP क्लाइंट के लिए नहीं)- डिफ़ॉल्ट:
"true" - केवल तब
"false"पर सेट करें जब MCP सर्वर ClickHouse तक सादे HTTP पर पहुँचता है (पोर्ट8123पर स्थानीय Docker Compose के लिए विशिष्ट) - ClickHouse Cloud और किसी भी HTTPS डेटाबेस एंडपॉइंट के लिए
"true"छोड़ें—भले ही MCP सर्वर स्वयं HTTP, stdio, या एक इनग्रेस के माध्यम से उजागर हो जो TLS को अलग से समाप्त करता है - इस फ़्लैग को डेटाबेस पोर्ट के साथ बेमेल करना (जैसे पोर्ट
8443के विरुद्धCLICKHOUSE_SECURE=false) एक लगातार सेटअप गलती है और आमतौर पर स्पष्ट "गलत स्कीम" संदेश के बजाय भ्रामक HTTP क्लाइंट त्रुटियों के रूप में प्रकट होता है
- डिफ़ॉल्ट:
CLICKHOUSE_VERIFY: ClickHouse HTTPS कनेक्शन के लिए SSL प्रमाणपत्र सत्यापन सक्षम/अक्षम करें- डिफ़ॉल्ट:
"true" - प्रमाणपत्र सत्यापन अक्षम करने के लिए
"false"पर सेट करें (उत्पादन के लिए अनुशंसित नहीं) - TLS प्रमाणपत्र: पैकेज स्टार्टअप पर
truststore.inject_into_ssl()के माध्यम से आपके ऑपरेटिंग सिस्टम ट्रस्ट स्टोर का उपयोग करता है। यदिMCP_CLICKHOUSE_TRUSTSTORE_DISABLE=1के साथ इंजेक्शन अक्षम है या विफल हो जाता है, तो Python का डिफ़ॉल्ट SSL हैंडलिंग उपयोग किया जाता है।
- डिफ़ॉल्ट:
MCP_CLICKHOUSE_TRUSTSTORE_DISABLE: TLS के लिए प्रक्रिया-व्यापी ऑपरेटिंग सिस्टम ट्रस्ट स्टोर एकीकरण अक्षम करें- डिफ़ॉल्ट: अनसेट (ट्रस्ट स्टोर एकीकरण सक्षम है)
truststore.inject_into_ssl()को छोड़ने और Python के डिफ़ॉल्ट SSL प्रमाणपत्र हैंडलिंग का उपयोग करने के लिए स्टार्टअप से पहले बिल्कुल"1"पर सेट करें। अन्य मान एकीकरण को अक्षम नहीं करते हैं।- यह प्रमाणपत्र सत्यापन को अक्षम नहीं करता है।
CLICKHOUSE_VERIFYअभी भी ClickHouse HTTPS कनेक्शन के लिए सत्यापन को नियंत्रित करता है।
CLICKHOUSE_CA_CERT: ClickHouse HTTPS कनेक्शन के लिए PEM CA प्रमाणपत्र बंडल का पथ- डिफ़ॉल्ट: कोई नहीं (ऑपरेटिंग सिस्टम ट्रस्ट स्टोर का उपयोग करता है जब तक कि ट्रस्टस्टोर इंजेक्शन अक्षम या विफल न हो)
- इसे अकेले उपयोग करें जब कोई ClickHouse सर्वर या निजी प्रॉक्सी एक निजी CA द्वारा हस्ताक्षरित प्रमाणपत्र प्रस्तुत करता है। यह सर्वर प्रमाणपत्र सत्यापन बदलता है और क्लाइंट प्रमाणपत्र प्रमाणीकरण सक्षम नहीं करता है।
CLICKHOUSE_SECURE=trueऔरCLICKHOUSE_VERIFY=trueकी आवश्यकता है
CLICKHOUSE_CLIENT_CERT: ClickHouse HTTPS कनेक्शन के लिए PEM क्लाइंट प्रमाणपत्र का पथ- डिफ़ॉल्ट: कोई नहीं
- फ़ाइल में निजी कुंजी भी हो सकती है। अन्यथा
CLICKHOUSE_CLIENT_CERT_KEYसेट करें। - ClickHouse उपयोगकर्ता अभी भी
CLICKHOUSE_USERसे आता है।
CLICKHOUSE_CLIENT_CERT_KEY:CLICKHOUSE_CLIENT_CERTके लिए PEM निजी कुंजी का पथ- डिफ़ॉल्ट: कोई नहीं
- वैकल्पिक जब निजी कुंजी क्लाइंट प्रमाणपत्र फ़ाइल में शामिल होती है
CLICKHOUSE_CLIENT_CERTके बिना उपयोग नहीं किया जा सकता
CLICKHOUSE_TLS_MODE: clickhouse-connectCLICKHOUSE_CLIENT_CERTका उपयोग कैसे करता है- डिफ़ॉल्ट: कोई नहीं, जो क्लाइंट प्रमाणपत्र सेट होने पर
"mutual"के रूप में व्यवहार करता है "mutual": ClickHouse X.509 उपयोगकर्ता प्रमाणीकरण के लिए क्लाइंट प्रमाणपत्र का उपयोग करें।CLICKHOUSE_PASSWORDवैकल्पिक है और नहीं भेजा जाता है।"proxy": TLS-समाप्त करने वाले प्रॉक्सी को क्लाइंट प्रमाणपत्र प्रस्तुत करें, फिर ClickHouse Basic प्रमाणीकरण का उपयोग करें।CLICKHOUSE_PASSWORDआवश्यक है।"strict": क्लाइंट प्रमाणपत्र प्रस्तुत करें क्योंकि ClickHouse सर्वर को TLS परत पर एक की आवश्यकता होती है, फिर ClickHouse Basic प्रमाणीकरण का उपयोग करें।CLICKHOUSE_PASSWORDआवश्यक है। यह मोड सर्वर प्रमाणपत्र सत्यापन को मजबूत नहीं करता है।CLICKHOUSE_VERIFYउस सत्यापन को नियंत्रित करता है।- clickhouse-connect
"proxy"और"strict"को समान रूप से मानता है। दोनों नाम इरादे का दस्तावेजीकरण करते हैं। - मान ट्रिम किए जाते हैं और केस-असंवेदनशील होते हैं। एक रिक्त मान अनसेट के रूप में माना जाता है। अन्य मान ClickHouse क्लाइंट बनाने से पहले, पहले ClickHouse टूल कॉल या
/healthप्रोब पर अस्वीकार कर दिए जाते हैं। CLICKHOUSE_CLIENT_CERTकी आवश्यकता है। सभी क्लाइंट प्रमाणपत्र विकल्पों कोCLICKHOUSE_SECURE=trueकी आवश्यकता होती है।
- डिफ़ॉल्ट: कोई नहीं, जो क्लाइंट प्रमाणपत्र सेट होने पर
CLICKHOUSE_SERVER_HOST_NAME: ClickHouse कनेक्शन पर SNI ओवरराइड और प्रमाणपत्र सत्यापन के लिए सर्वर होस्टनाम- डिफ़ॉल्ट: कोई नहीं (कनेक्शन होस्टनाम का उपयोग करता है)
- यह प्रॉक्सी या लोड बैलेंसर के माध्यम से कनेक्ट करते समय उपयोगी है जहाँ प्रमाणपत्र होस्टनाम कनेक्शन होस्टनाम से भिन्न होता है। सेट होने पर, यह होस्टनाम TLS हैंडशेक के दौरान SNI (सर्वर नाम संकेत) और प्रमाणपत्र होस्टनाम सत्यापन दोनों के लिए उपयोग किया जाएगा।
CLICKHOUSE_PROXY_PATH: ClickHouse HTTP एंडपॉइंट के लिए URL पथ उपसर्ग- डिफ़ॉल्ट: कोई नहीं
- इसे सेट करें जब ClickHouse HTTP इंटरफ़ेस एक रिवर्स प्रॉक्सी के पीछे पथ उपसर्ग के तहत उजागर होता है (उदाहरण के लिए,
/clickhouse)
CLICKHOUSE_CONNECT_TIMEOUT: ClickHouse क्लाइंट के लिए कनेक्शन टाइमआउट सेकंड में- डिफ़ॉल्ट:
"30" - यदि आप कनेक्शन टाइमआउट का अनुभव करते हैं तो इस मान को बढ़ाएँ
- डिफ़ॉल्ट:
CLICKHOUSE_SEND_RECEIVE_TIMEOUT: ClickHouse क्लाइंट के लिए भेजें/प्राप्त करें टाइमआउट सेकंड में- डिफ़ॉल्ट:
300याCLICKHOUSE_MCP_QUERY_TIMEOUT + 5में से जो कम हो, ताकि क्वेरी टाइमआउट के तुरंत बाद वर्कर थ्रेड अनब्लॉक हो जाएँ - यदि स्पष्ट रूप से सेट किया गया है, तो मान का उपयोग जैसा है वैसा किया जाता है (जैसे लंबे समय तक चलने वाली क्वेरी के लिए
"300")
- डिफ़ॉल्ट:
CLICKHOUSE_DATABASE: उपयोग करने के लिए डिफ़ॉल्ट ClickHouse डेटाबेस- डिफ़ॉल्ट: कोई नहीं (सर्वर डिफ़ॉल्ट का उपयोग करता है)
- किसी विशिष्ट डेटाबेस से स्वचालित रूप से कनेक्ट करने के लिए इसे सेट करें
CLICKHOUSE_ENABLED: ClickHouse डेटाबेस टूल सक्षम/अक्षम करें- डिफ़ॉल्ट:
"true" - केवल chDB का उपयोग करते समय ClickHouse टूल अक्षम करने के लिए
"false"पर सेट करें
- डिफ़ॉल्ट:
CLICKHOUSE_ALLOW_WRITE_ACCESS: ClickHouse के विरुद्ध लेखन संचालन (DDL और DML) की अनुमति दें- डिफ़ॉल्ट:
"false" - गैर-विनाशकारी DDL और DML (CREATE, INSERT, ALTER ADD COLUMN) की अनुमति देने के लिए
"true"पर सेट करें। विनाशकारी स्टेटमेंट को अतिरिक्त रूप सेCLICKHOUSE_ALLOW_DROP=trueकी आवश्यकता होती है - जब अक्षम (डिफ़ॉल्ट), क्वेरी डेटा संशोधनों को रोकने के लिए
readonly=1सेटिंग के साथ चलती हैं
- डिफ़ॉल्ट:
CLICKHOUSE_ALLOW_DROP: विनाशकारी संचालन की अनुमति दें (कोई भीDROPयाTRUNCATE,DELETEऔरUPDATEजिसमेंALTER TABLEवेरिएंट शामिल हैं,REPLACE TABLE/REPLACE PARTITION/CREATE OR REPLACE,CLEAR COLUMN/CLEAR INDEX/CLEAR PROJECTION, औरDETACH ... PERMANENTLY)- डिफ़ॉल्ट:
"false" - केवल तब प्रभावी होता है जब
CLICKHOUSE_ALLOW_WRITE_ACCESS=trueभी सेट हो - यह गेट MCP सर्वर में एक सर्वोत्तम-प्रयास दुर्घटना गार्ड है, सुरक्षा सीमा नहीं। वास्तविक प्रवर्तन के लिए ClickHouse उपयोगकर्ता के अनुदानों को प्रतिबंधित करें (देखें विनाशकारी संचालन सुरक्षा)
- डिफ़ॉल्ट:
ClickHouse TLS प्रमाणपत्र फ़ाइलें
प्रमाणपत्र चर फ़ाइल पथ रखते हैं, PEM सामग्री नहीं। mcp-clickhouse इन पथों को clickhouse-connect को भेजता है। Docker या Kubernetes के लिए, प्रमाणपत्र और निजी कुंजी को केवल-पठनीय फ़ाइलों के रूप में माउंट करें और कंटेनर के अंदर उनके पथ का उपयोग करें। निजी कुंजी को इमेज में बेक न करें, इसे स्रोत नियंत्रण में कमिट न करें, या इसकी सामग्री को पर्यावरण चर में न डालें।mutual मोड में, कॉन्फ़िगर किया गया क्लाइंट प्रमाणपत्र इस mcp-clickhouse प्रक्रिया को CLICKHOUSE_USER के रूप में पहचानता है। यह इनबाउंड MCP क्लाइंट्स को प्रमाणित नहीं करता है या उनकी पहचान ClickHouse को नहीं भेजता है। MCP ट्रांसपोर्ट प्रमाणीकरण को अलग से कॉन्फ़िगर करें।
प्रमाणपत्र या कुंजी को उसी पथ पर बदलने के बाद mcp-clickhouse को पुनरारंभ करें जब तत्काल रोटेशन या रद्दीकरण आवश्यक हो। कैश्ड क्लाइंट मौजूदा TLS कनेक्शन बनाए रख सकते हैं, और कैश फ़ाइल सामग्री या संशोधन समय को ट्रैक नहीं करता है।
ClickHouse Cloud डेटाबेस उपयोगकर्ताओं के लिए X.509 क्लाइंट प्रमाणपत्र प्रमाणीकरण का समर्थन नहीं करता है। ClickHouse Cloud के लिए CLICKHOUSE_USER और CLICKHOUSE_PASSWORD का उपयोग करें। एक CA प्रमाणपत्र अभी भी उपयोगी हो सकता है जब एंडपॉइंट के सामने एक निजी प्रॉक्सी एक निजी CA द्वारा हस्ताक्षरित प्रमाणपत्र प्रस्तुत करता है।
MCP सर्वर और ट्रांसपोर्ट
ये चर MCP प्रक्रिया को स्वयं नियंत्रित करते हैं, जिसमें ट्रांसपोर्ट, प्रमाणीकरण और क्वेरी-टूल निष्पादन सीमाएँ शामिल हैं। वे ऊपर दी गई ClickHouse डेटाबेस सेटिंग्स से स्वतंत्र हैं। HTTP/SSE ट्रांसपोर्ट के लिए प्रमाणीकरण भी देखें।
CLICKHOUSE_MCP_SERVER_TRANSPORT: MCP सर्वर के लिए ट्रांसपोर्ट विधि सेट करता है- डिफ़ॉल्ट:
"stdio" - मान्य विकल्प:
"stdio","http","sse"। यह MCP Inspector जैसे टूल के साथ स्थानीय विकास के लिए उपयोगी है। stdioClaude Desktop के लिए विशिष्ट है;http/sseएक नेटवर्क लिसनर उजागर करते हैं (नीचे बाइंड होस्ट/पोर्ट)"sse"पुराने स्टैंडअलोन HTTP+SSE ट्रांसपोर्ट का चयन करता है और एक चेतावनी लॉग करता है। नई तैनाती में Streamable HTTP के लिए"http"का उपयोग करें।
- डिफ़ॉल्ट:
CLICKHOUSE_MCP_BIND_HOST: HTTP या SSE ट्रांसपोर्ट का उपयोग करते समय MCP सर्वर को बाइंड करने के लिए होस्ट- डिफ़ॉल्ट:
"127.0.0.1" - सभी नेटवर्क इंटरफेस से बाइंड करने के लिए
"0.0.0.0"पर सेट करें (Docker या दूरस्थ पहुंच के लिए उपयोगी) - केवल तब उपयोग किया जाता है जब ट्रांसपोर्ट
"http"या"sse"हो —CLICKHOUSE_HOSTसे संबंधित नहीं
- डिफ़ॉल्ट:
CLICKHOUSE_MCP_BIND_PORT: HTTP या SSE ट्रांसपोर्ट का उपयोग करते समय MCP सर्वर को बाइंड करने के लिए पोर्ट- डिफ़ॉल्ट:
"8000" - केवल तब उपयोग किया जाता है जब ट्रांसपोर्ट
"http"या"sse"हो —CLICKHOUSE_PORTसे संबंधित नहीं
- डिफ़ॉल्ट:
CLICKHOUSE_MCP_QUERY_TIMEOUT: क्वेरी टूल कॉल के लिए टाइमआउट सेकंड में- डिफ़ॉल्ट:
"30" - भारी क्वेरी के लिए
Query timed out after ...त्रुटियाँ दिखने पर इसे बढ़ाएँ - जब कोई क्वेरी टाइमआउट हो जाती है, तो सर्वर इसे
KILL QUERYके साथ रद्द करने का प्रयास करता है - जब तक
CLICKHOUSE_SEND_RECEIVE_TIMEOUTस्पष्ट रूप से सेट न हो, HTTP रीड टाइमआउट इस मान प्लस पाँच सेकंड पर सीमित होता है
- डिफ़ॉल्ट:
CLICKHOUSE_MCP_MAX_WORKERS: अधिकतम समवर्ती क्वेरी वर्कर थ्रेड्स की संख्या- डिफ़ॉल्ट:
"10" - यदि आपके वर्कलोड को कई समवर्ती टूल कॉल की आवश्यकता हो तो बढ़ाएँ
- मेटाडेटा टूल
min(4, CLICKHOUSE_MCP_MAX_WORKERS)थ्रेड्स के साथ एक अलग पूल का उपयोग करते हैं ताकि स्कीमा खोज क्वेरी में देरी न कर सके
- डिफ़ॉल्ट:
CLICKHOUSE_MCP_AUTH_TOKEN: HTTP/SSE ट्रांसपोर्ट के लिए स्थिर बियरर टोकन- डिफ़ॉल्ट: कोई नहीं
- HTTP/SSE ट्रांसपोर्ट के लिए
CLICKHOUSE_MCP_AUTH_TOKEN,FASTMCP_SERVER_AUTH, याCLICKHOUSE_MCP_AUTH_DISABLED=trueमें से एक आवश्यक है uuidgenयाopenssl rand -hex 32का उपयोग करके उत्पन्न करें- क्लाइंट्स को यह टोकन
Authorization: Bearer <token>हेडर में भेजना चाहिए
FASTMCP_SERVER_AUTH: FastMCP auth provider को प्रमाणीकरण सौंपें- डिफ़ॉल्ट: कोई नहीं
- मान AuthProvider उपवर्ग का पूर्ण क्लास पथ है, जैसे
fastmcp.server.auth.providers.azure.AzureProviderयाfastmcp.server.auth.providers.google.GoogleProvider - सेट होने पर, mcp-clickhouse मौजूदा
FASTMCP_SERVER_AUTH_*पर्यावरण चर से प्रदाता लोड करता है; इस मोड मेंCLICKHOUSE_MCP_AUTH_TOKENको अनसेट छोड़ दें - कस्टम प्रदाताओं को पर्यावरण-व्युत्पन्न कंस्ट्रक्टर तर्क नहीं मिलते हैं और उन्हें बिना-तर्क निर्माण का समर्थन करना चाहिए
- FastMCP 4 अब Supabase HS256 सत्यापन का समर्थन नहीं करता है। Supabase तैनाती को RS256 या ES256 का उपयोग करना चाहिए।
FASTMCP_ENV_FILE:FASTMCP_SERVER_AUTHऔर प्रदाता-विशिष्ट पर्यावरण चर वाली वैकल्पिक फ़ाइल- डिफ़ॉल्ट: कोई नहीं। अनसेट होने पर, संगतता लोडर कार्यशील निर्देशिका में
.envसे लापता प्रदाता फ़ील्ड पढ़ता है। यह उस फ़ॉलबैक सेFASTMCP_SERVER_AUTHनहीं पढ़ता है - इसे स्टार्टअप से पहले प्रक्रिया पर्यावरण में सेट करें। डिफ़ॉल्ट
.envसे लोड किया गया मान संगतता लोडर को पुनर्निर्देशित नहीं कर सकता है - यदि प्रक्रिया-सेट है, तो यह फ़ाइल
FASTMCP_SERVER_AUTHऔर प्रदाता फ़ील्ड दोनों प्रदान कर सकती है और कार्यशील-निर्देशिका फ़ॉलबैक को प्रतिस्थापित करती है - प्रक्रिया पर्यावरण मान केस-असंवेदनशील रूप से प्राथमिकता लेते हैं
- mcp-clickhouse संगतता लोडर इस फ़ाइल को केवल HTTP/SSE प्रमाणीकरण बनाते समय पढ़ता है और केवल
FASTMCP_SERVER_AUTHऔरFASTMCP_SERVER_AUTH_*प्रविष्टियाँ पढ़ता है। FastMCP 4 अपनी व्यापक सेटिंग्स के लिए एक ही फ़ाइल पढ़ सकता है - डिफ़ॉल्ट
.envलोड अलग है। यह स्थापितmcp_clickhouseपैकेज निर्देशिका से शुरू होता है, सिमलिंक हल करता है, फाइलसिस्टम रूट तक ऊपर चलता है, और पहला.envपाया गया या कुछ भी नहीं लोड करता है। यह लॉन्च विधि की परवाह किए बिना कार्यशील निर्देशिका को कभी नहीं पढ़ता है। वह फ़ाइलFASTMCP_SERVER_AUTHऔर प्रदाता फ़ील्ड अन्य सर्वर सेटिंग्स के साथ प्रदान कर सकती है। एक स्रोत चेकआउट सामान्य रूप से रिपॉजिटरी रूट.envपाता है
- डिफ़ॉल्ट: कोई नहीं। अनसेट होने पर, संगतता लोडर कार्यशील निर्देशिका में
CLICKHOUSE_MCP_AUTH_DISABLED: HTTP/SSE ट्रांसपोर्ट के लिए प्रमाणीकरण अक्षम करें- डिफ़ॉल्ट:
"false"(प्रमाणीकरण सक्षम है) - केवल स्थानीय विकास/परीक्षण के लिए प्रमाणीकरण अक्षम करने के लिए
"true"पर सेट करें - चेतावनी: केवल स्थानीय विकास के लिए उपयोग करें। नेटवर्क पर उजागर होने पर अक्षम न करें
- डिफ़ॉल्ट:
CLICKHOUSE_MCP_ALLOWED_HOSTS: अल्पविराम से अलगHostहेडर मान जिनके लिए HTTP/SSE सर्वर उत्तर देता है- लूपबैक बाइंड के लिए डिफ़ॉल्ट:
127.0.0.1,localhost, और[::1]के बेयर और किसी-भी-पोर्ट रूप - यदि सेट है, तो मान में कम से कम एक Host प्रविष्टि होनी चाहिए।
- एक ठोस गैर-लूपबैक बाइंड पता डिफ़ॉल्ट रूप से उस पते और कॉन्फ़िगर किए गए पोर्ट पर होता है। एक वाइल्डकार्ड बाइंड जैसे
0.0.0.0या::को स्पष्ट गैर-रिक्त मान की आवश्यकता होती है क्योंकि सार्वजनिक Host का अनुमान नहीं लगाया जा सकता है। - Host सत्यापन DNS रिबाइंडिंग के खिलाफ गहराई में रक्षा है। नीचे ओरिजिन सत्यापन MCP द्वारा अलग से आवश्यक है।
- प्रविष्टियाँ सटीक (
localhost:8000) हैं या किसी भी पोर्ट को स्वीकार करती हैं (localhost:*)। उदाहरण:CLICKHOUSE_MCP_ALLOWED_HOSTS=127.0.0.1:8000,localhost:8000 host:*रूप केवल उन मानों से मेल खाता है जिनमें पोर्ट होता है। एक पोर्ट-रहित Host (एक मानक-पोर्ट तैनाती जहां क्लाइंट:80/:443छोड़ देता है) को बेयर सटीक प्रविष्टि (example.com) के रूप में भी सूचीबद्ध किया जाना चाहिए।- गैर-मेल खाने वाले या लापता
Hostहेडर वाले अनुरोधों को421 Misdirected Requestमिलता है।/healthके लिए GET और HEAD अनुरोध Host और Origin सत्यापन से मुक्त हैं ताकि ऑर्केस्ट्रेटर प्रोब काम करते रहें। - रिवर्स प्रॉक्सी के पीछे, मूल
Hostहेडर को संरक्षित करना पसंद करें। आप इसके बजाय प्रॉक्सी द्वारा भेजे गए अपस्ट्रीमHostमान को सूचीबद्ध कर सकते हैं। एक स्पष्ट सूची सेट करें जब एक लॉन्चर जैसेfastmcp runदूरस्थ पहुंच के लिए बाइंड पते को ओवरराइड करता है। - mcp-clickhouse FastMCP के अलग Host और Origin गार्ड को बंद करने के लिए मजबूर करता है।
FASTMCP_HTTP_HOST_ORIGIN_PROTECTION,FASTMCP_HTTP_ALLOWED_HOSTS, औरFASTMCP_HTTP_ALLOWED_ORIGINSलागू नहीं होते हैं।CLICKHOUSE_MCP_ALLOWED_HOSTSऔरCLICKHOUSE_MCP_ALLOWED_ORIGINSआधिकारिक हैं।
- लूपबैक बाइंड के लिए डिफ़ॉल्ट:
CLICKHOUSE_MCP_TRUSTED_PROXIES: प्रॉक्सी IP पते या CIDR नेटवर्क जिनकेX-Forwarded-*हेडर पर भरोसा किया जाता है- डिफ़ॉल्ट: कोई नहीं।
X-Forwarded-Hostको अनदेखा किया जाता है।X-Forwarded-ForऔरX-Forwarded-Protoकी मौजूदा Uvicorn हैंडलिंग अपरिवर्तित है। - प्रविष्टियाँ IP पते या CIDR नेटवर्क होनी चाहिए, जैसे
127.0.0.1,10.20.0.0/24,2001:db8::1। CIDR को अपने नेटवर्क पते का उपयोग करना चाहिए, इसलिए10.20.0.1/24अस्वीकार कर दिया जाता है। होस्ट नाम, स्कोप्ड IPv6 पते,*,0.0.0.0/0, और::/0भी अस्वीकार कर दिए जाते हैं। - भरोसा तत्काल कच्चे सॉकेट पीयर पर आधारित है। किसी अन्य पीयर से अनुरोध, या क्लाइंट पते के बिना अनुरोध,
X-Forwarded-Hostको अनदेखा करता है औरHostको मान्य करता है। - एक भरोसेमंद पीयर एक गैर-रिक्त मान वाला बिल्कुल एक
X-Forwarded-Hostहेडर भेज सकता है। डुप्लिकेट फ़ील्ड, रिक्त मान, और अल्पविराम से अलग सूचियों को421 Misdirected Requestमिलता है। यदि हेडर अनुपस्थित है, तोHostमान्य किया जाता है। - सबसे संकीर्ण संभव पते या नेटवर्क का उपयोग करें। MCP सर्वर केवल कॉन्फ़िगर किए गए रेंज में प्रॉक्सी के माध्यम से पहुंच योग्य होना चाहिए। प्रत्येक भरोसेमंद प्रॉक्सी को क्लाइंट द्वारा आपूर्ति किए गए
X-Forwarded-HostऔरX-Forwarded-Protoमानों को हटाना और ओवरराइट करना चाहिए, और सत्यापित कनेक्शन पीयर सेX-Forwarded-Forका निर्माण करना चाहिए। - अंतर्निहित सर्वर और
fastmcp runUvicorn के बाहरी प्रॉक्सी-हेडर हैंडलिंग को अक्षम करते हैं, कच्चे पीयर से Host को मान्य करते हैं, फिरX-Forwarded-ForऔरX-Forwarded-Protoलागू करते हैं। स्पष्ट रूप सेuvicorn_config["proxy_headers"]सक्षम करना इस मोड में स्टार्टअप विफल करता है। - प्रत्यक्ष ASGI एम्बेडिंग को बाहरी ASGI सर्वर में प्रॉक्सी-हेडर हैंडलिंग अक्षम करनी चाहिए और
mcp.http_app(raw_client_address_preserved=True)को कॉल करना चाहिए। उस स्पष्ट अभिकथन के बिना, भरोसेमंद प्रॉक्सी कॉन्फ़िगर होने पर ऐप निर्माण विफल हो जाता है।
- डिफ़ॉल्ट: कोई नहीं।
CLICKHOUSE_MCP_ALLOWED_ORIGINS: HTTP/SSE पर स्वीकृत अल्पविराम से अलगOriginहेडर मान- डिफ़ॉल्ट: कोई नहीं, जो
Originहेडर ले जाने वाले हर अनुरोध को अस्वीकार करता है - MCP को HTTP/SSE ट्रांसपोर्ट कनेक्शन के लिए Origin सत्यापन की आवश्यकता होती है। बिना Origin के अनुरोध स्वीकार किए जाते हैं क्योंकि गैर-ब्राउज़र MCP क्लाइंट सामान्य रूप से इसे छोड़ देते हैं। एक गैर-मेल खाने वाला Origin
403 Forbiddenप्राप्त करता है।/healthएंडपॉइंट ऊपर वर्णित अनुसार मुक्त है। - प्रविष्टियाँ सटीक (
http://localhost:3000) हैं या किसी भी पोर्ट को स्वीकार करती हैं (http://localhost:*)। होस्ट के साथ, किसी-भी-पोर्ट रूप केवल उन ओरिजिन से मेल खाता है जिनमें पोर्ट होता है; एक मानक-पोर्ट ओरिजिन (https://app.example.com) को सटीक रूप से सूचीबद्ध किया जाना चाहिए।
- डिफ़ॉल्ट: कोई नहीं, जो
रिवर्स प्रॉक्सी Host हैंडलिंग
जब संभव हो Host को संरक्षित करें। यह फॉरवर्डेड Host ट्रस्ट को अक्षम रखता है:
location / {
proxy_pass http://mcp-clickhouse:8000;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host "";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
X-Forwarded-For और X-Forwarded-Proto को X-Forwarded-Host ट्रस्ट से स्वतंत्र रूप से सैनिटाइज़ करें। Uvicorn उन हेडर पर प्रॉक्सी पीयर के आधार पर भरोसा कर सकता है भले ही CLICKHOUSE_MCP_TRUSTED_PROXIES अनसेट हो।
CLICKHOUSE_MCP_ALLOWED_HOSTS=mcp.example.com
स्टॉक nginx प्रॉक्सी किए गए अनुरोधों के लिए Host को अपस्ट्रीम नाम में बदलता है। यह X-Forwarded-Host नहीं बनाता या ओवरराइट नहीं करता है। यदि Host को संरक्षित करना संभव नहीं है, तो भरोसेमंद किनारे पर फॉरवर्डेड हेडर को ओवरराइट करें:
location / {
proxy_pass http://mcp-clickhouse:8000;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
CLICKHOUSE_MCP_ALLOWED_HOSTS=mcp.example.com
CLICKHOUSE_MCP_TRUSTED_PROXIES=10.20.0.8
दूसरा कॉन्फ़िगरेशन केवल तभी सुरक्षित है जब 10.20.0.8 प्रॉक्सी का तत्काल स्रोत पता हो, सर्वर पोर्ट अन्य क्लाइंट्स से अलग हो, और nginx आने वाले फॉरवर्डिंग हेडर को दिखाए अनुसार ओवरराइट करता है। प्रॉक्सी श्रृंखला के लिए, प्रत्येक भरोसेमंद हॉप को नए फॉरवर्डिंग हेडर बनाने से पहले असत्यापित आने वाले मानों को त्यागना चाहिए।
IPv6 या डुअल-स्टैक बाइंड पर, IPv4 प्रॉक्सी IPv4-मैप किए गए पते जैसे ::ffff:10.20.0.8 के रूप में दिखाई दे सकते हैं; ये स्वचालित रूप से IPv4 प्रविष्टियों से मेल खाते हैं। Envoy का append_x_forwarded_host मौजूदा X-Forwarded-Host में जोड़ता है बजाय इसे ओवरराइट करने के, एक अल्पविराम से अलग सूची उत्पन्न करता है जिसे अस्वीकार कर दिया जाता है, इसलिए भरोसेमंद हॉप को हेडर को ओवरराइट करने के लिए कॉन्फ़िगर करें। स्रोत NAT के साथ Kubernetes पर (उदाहरण के लिए externalTrafficPolicy: Cluster) देखा गया पीयर प्रॉक्सी पॉड के बजाय एक नोड IP हो सकता है, इसलिए पॉड या नोड CIDR पर उचित रूप से भरोसा करें; ingress-nginx स्वयं Host और X-Forwarded-Host दोनों को ओवरराइट करता है।
मिडलवेयर चर
MCP_MIDDLEWARE_MODULE: MCP सर्वर में इंजेक्ट करने के लिए कस्टम मिडलवेयर वाला Python मॉड्यूल नाम- डिफ़ॉल्ट: कोई नहीं (कोई मिडलवेयर लोड नहीं)
- अपने मिडलवेयर मॉड्यूल के मॉड्यूल नाम पर सेट करें (बिना
.pyएक्सटेंशन के) - मॉड्यूल को एक
setup_middleware(mcp)फ़ंक्शन प्रदान करना चाहिए - विवरण और उदाहरणों के लिए कस्टम मिडलवेयर देखें
chDB चर
CHDB_ENABLED: chDB कार्यक्षमता सक्षम/अक्षम करें- डिफ़ॉल्ट:
"false" - chDB टूल्स सक्षम करने के लिए
"true"पर सेट करें - वैकल्पिक एक्स्ट्रा इंस्टॉल करना आवश्यक है:
mcp-clickhouse[chdb]
- डिफ़ॉल्ट:
CHDB_DATA_PATH: chDB डेटा निर्देशिका का पथ- डिफ़ॉल्ट:
":memory:"(इन-मेमोरी डेटाबेस) - इन-मेमोरी डेटाबेस के लिए
:memory:का उपयोग करें - स्थायी भंडारण के लिए फ़ाइल पथ का उपयोग करें (जैसे,
/path/to/chdb/data)
- डिफ़ॉल्ट:
सामान्य कॉन्फ़िगरेशन गलतियाँ
CLICKHOUSE_SECUREबनाम MCP / इनग्रेस TLS —CLICKHOUSE_SECUREको बंद करना क्योंकि MCP सर्वर Kubernetes इनग्रेस, रिवर्स प्रॉक्सी के पीछे है, या सादे HTTP के माध्यम से पहुँचा जाता है, डेटाबेस TLS को अक्षम नहीं करता; यह केवल बदलता है कि यह प्रक्रिया ClickHouse से कैसे जुड़ती है। इनग्रेस TLS को डेटाबेस क्लाइंट सेटिंग्स से अलग कॉन्फ़िगर करें।- नेटिव प्रोटोकॉल पोर्ट —
CLICKHOUSE_PORTको ClickHouse के HTTP इंटरफ़ेस (डिफ़ॉल्ट रूप से8123/8443) को लक्षित करना चाहिए। पोर्ट9000/9440नेटिव TCP प्रोटोकॉल (clickhouse-client) के लिए हैं और इस सर्वर के साथ काम नहीं करेंगे। - होस्ट भ्रम —
CLICKHOUSE_HOSTडेटाबेस होस्टनाम है।CLICKHOUSE_MCP_BIND_HOSTकेवल वह पता है जिस पर MCP HTTP/SSE सर्वर सुनता है।
उदाहरण कॉन्फ़िगरेशन
Docker के साथ स्थानीय विकास के लिए:
# Required variables
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
# Optional: Override defaults for local development
CLICKHOUSE_SECURE=false # Uses port 8123 automatically
CLICKHOUSE_VERIFY=false
ClickHouse Cloud के लिए:
# Required variables
CLICKHOUSE_HOST=your-instance.clickhouse.cloud
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=your-password
# Optional: These use secure defaults
# CLICKHOUSE_SECURE=true # Uses port 8443 automatically
# CLICKHOUSE_DATABASE=your_database
ClickHouse SQL Playground के लिए:
CLICKHOUSE_HOST=sql-clickhouse.clickhouse.com
CLICKHOUSE_USER=demo
CLICKHOUSE_PASSWORD=
# Uses secure defaults (HTTPS on port 8443)
क्लाइंट प्रमाणपत्र प्रमाणीकरण के बिना निजी सर्वर CA के लिए:
CLICKHOUSE_HOST=your-secure-clickhouse.example.com
CLICKHOUSE_USER=your-user
CLICKHOUSE_PASSWORD=your-password
CLICKHOUSE_SECURE=true
CLICKHOUSE_VERIFY=true
CLICKHOUSE_CA_CERT=/run/secrets/clickhouse-ca.pem
ClickHouse X.509 क्लाइंट प्रमाणपत्र प्रमाणीकरण के लिए:
CLICKHOUSE_HOST=your-secure-clickhouse.example.com
CLICKHOUSE_USER=your-certificate-user
CLICKHOUSE_SECURE=true
CLICKHOUSE_CLIENT_CERT=/run/secrets/clickhouse-client.pem
CLICKHOUSE_CLIENT_CERT_KEY=/run/secrets/clickhouse-client-key.pem
# CLICKHOUSE_CA_CERT=/run/secrets/clickhouse-ca.pem # Only for a private server CA
# CLICKHOUSE_TLS_MODE=mutual # Optional. This is the default with a client certificate.
एक सख्त TLS सर्वर द्वारा आवश्यक क्लाइंट प्रमाणपत्र के लिए जबकि ClickHouse बेसिक प्रमाणीकरण का उपयोग करता है:
CLICKHOUSE_HOST=your-secure-clickhouse.example.com
CLICKHOUSE_USER=your-user
CLICKHOUSE_PASSWORD=your-password
CLICKHOUSE_SECURE=true
CLICKHOUSE_CLIENT_CERT=/run/secrets/clickhouse-client.pem
CLICKHOUSE_CLIENT_CERT_KEY=/run/secrets/clickhouse-client-key.pem
CLICKHOUSE_TLS_MODE=strict
जब TLS-समाप्त करने वाला प्रॉक्सी क्लाइंट प्रमाणपत्र की आवश्यकता रखता है और ClickHouse
अभी भी बेसिक प्रमाणीकरण का उपयोग करता है, तो CLICKHOUSE_TLS_MODE=proxy का उपयोग करें।
केवल chDB के लिए (इन-मेमोरी):
# chDB configuration
CHDB_ENABLED=true
CLICKHOUSE_ENABLED=false
# CHDB_DATA_PATH defaults to :memory:
स्थायी भंडारण के साथ chDB के लिए:
# chDB configuration
CHDB_ENABLED=true
CLICKHOUSE_ENABLED=false
CHDB_DATA_PATH=/path/to/chdb/data
MCP Inspector या HTTP ट्रांसपोर्ट के साथ दूरस्थ पहुँच के लिए:
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
CLICKHOUSE_MCP_SERVER_TRANSPORT=http
CLICKHOUSE_MCP_BIND_HOST=0.0.0.0 # Bind to all interfaces
CLICKHOUSE_MCP_BIND_PORT=4200 # Custom port (default: 8000)
CLICKHOUSE_MCP_AUTH_TOKEN=your-generated-token # One auth mode required for HTTP/SSE (or FASTMCP_SERVER_AUTH, or CLICKHOUSE_MCP_AUTH_DISABLED=true)
CLICKHOUSE_MCP_ALLOWED_HOSTS=127.0.0.1:4200,localhost:4200,mcp.example.com:4200 # Include every Host value clients and proxies send
HTTP ट्रांसपोर्ट के साथ स्थानीय विकास के लिए (प्रमाणीकरण अक्षम):
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
CLICKHOUSE_MCP_SERVER_TRANSPORT=http
CLICKHOUSE_MCP_AUTH_DISABLED=true # Only for local development!
CLICKHOUSE_MCP_ALLOWED_HOSTS=127.0.0.1:8000,localhost:8000
HTTP ट्रांसपोर्ट का उपयोग करते समय, सर्वर कॉन्फ़िगर किए गए पोर्ट (डिफ़ॉल्ट 8000) पर चलेगा। उदाहरण के लिए, उपरोक्त कॉन्फ़िगरेशन के साथ:
- MCP एंडपॉइंट:
http://localhost:8000/mcp - स्वास्थ्य जाँच:
http://localhost:8000/health
आप इन वेरिएबल्स को अपने वातावरण में, .env फ़ाइल में, या Claude Desktop कॉन्फ़िगरेशन में सेट कर सकते हैं:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.12",
"mcp-clickhouse"
],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"CLICKHOUSE_DATABASE": "<optional-database>",
"CLICKHOUSE_MCP_SERVER_TRANSPORT": "stdio",
"CLICKHOUSE_MCP_BIND_HOST": "127.0.0.1",
"CLICKHOUSE_MCP_BIND_PORT": "8000"
}
}
}
}
नोट: बाइंड होस्ट और पोर्ट सेटिंग्स केवल तब उपयोग की जाती हैं जब ट्रांसपोर्ट "http" या "sse" पर सेट हो।
परीक्षण चलाना
uv sync --all-extras --dev # install dev dependencies
uv run ruff check . # run linting
docker compose up -d test_services # start ClickHouse
uv run pytest -v tests
uv run pytest -v tests/test_tool.py # ClickHouse only
CHDB_ENABLED=true uv run --extra chdb pytest -v tests/test_chdb_tool.py # chDB only
