ClickHouse
resmiClickHouse veritabanı sunucunuzu sorgulayın.
ClickHouse MCP ile neler yapabilirsiniz?
- Run SQL sorguları — ClickHouse kümenizde
run_queryile herhangi bir SQL sorgusunu çalıştırmasını isteyin;paramsile isteğe bağlı adlandırılmış parametreler ekleyebilirsiniz. - Veritabanlarını listele —
list_databaseskullanarak ClickHouse kümenizdeki tüm veritabanlarını keşfedin. - Filtrelerle tablolara göz at — Bir veritabanındaki tabloları keşfetmek için
list_tableskullanın;like/not_likedesenleri vepage_tokenilepage_sizeüzerinden sayfalama uygulayın. - Sorgu şemalarını incele — Çalıştırmadan önce çıktı sütunlarını veya tahmini okumaları kontrol etmek için
run_queryileDESCRIBE (<query>)veyaEXPLAIN ESTIMATE <query>isteyin. - Gömülü chDB verilerini sorgula — ETL olmadan dosyaları, URL'leri veya veritabanlarını sorgulamak için
run_chdb_select_querykullanarak doğrudan chDB'nin gömülü motoruna SQL çalıştırın.
Dokümantasyon
ClickHouse MCP Sunucusu
ClickHouse için bir MCP sunucusu.
Sunucu, MCP 2026-07-28 protokolünü uygular ve 2024-11-05 ile 2025-11-25 arasındaki sürümlerden eski initialize el sıkışmalarını destekler. Modern istemciler oturumsuz istekleri ve server/discover kullanır. Mevcut istemciler eski protokolü kullanmaya devam edebilir.
[!NOTE]
MCP-Protocol-Versioniçermeyen HTTP istekleri,2025-06-18öncesindeki istemcilerin bağlanmaya devam edebilmesi için eski işleme yönlendirilir. MCP2026-07-28, bu istemcileri destekleyen sunucularda bu davranışa izin verir. Modern istemciler, her POST isteğinde başlığı göndermelidir.
Özellikler
ClickHouse Araçları
ClickHouse araç yanıtları JSON kodlu dizelerdir. [-9007199254740991, 9007199254740991] dışındaki tam sayılar, JavaScript istemcilerinde tam değerleri korumak için ondalık dizeler olarak döndürülür. Bu, sorgu satırları ve tam sayı tablo meta verileri için geçerlidir. Güvenli aralıktaki tam sayılar ve boole değerleri JSON türlerini korur.
-
run_query- ClickHouse kümenizde SQL sorguları çalıştırın.
- Girdi:
query(dize): Çalıştırılacak SQL sorgusu. - İsteğe bağlı girdi:
params(nesne): ClickHouse{name:Type}yer tutucuları için adlandırılmış değerler. Sorgu parametreleri bölümüne bakın. - Sorgular varsayılan olarak salt okunur modda çalışır (
CLICKHOUSE_ALLOW_WRITE_ACCESS=false), ancak gerekirse yazma işlemleri açıkça etkinleştirilebilir. DESCRIBE (<query>)veEXPLAIN ESTIMATE <query>da burada çalışır ve bir sorgunun sonuç şemasını veya tahmini okuma miktarını incelemenin isteğe bağlı yollarıdır. Sorguyu çalıştırmadan önce kontrol etme bölümüne bakın.
-
list_databases- ClickHouse kümenizdeki tüm veritabanlarını listeler.
-
list_tables- Sayfalama ile bir veritabanındaki tabloları listeler.
- Zorunlu girdi:
database(dize). - İsteğe bağlı girdiler:
like/not_like(dize): Tablo adlarınaLIKEveyaNOT LIKEfiltreleri uygulayın.page_token(dize): Önceki bir çağrı tarafından döndürülen tek kullanımlık belirteç. En fazla bir saat saklanır.page_size(int, varsayılan50): Sayfa başına döndürülen tablo sayısı;0değerinden büyük olmalıdır.include_detailed_columns(bool, varsayılantrue):falseolduğunda, tamcreate_table_querykorunurken daha hafif yanıtlar için sütun meta verilerini atlar.
- Yanıt yapısı:
tables: Geçerli sayfa için tablo nesneleri dizisi.next_page_token: Sonraki sayfayı getirmek için bu tek kullanımlık değeri süresi dolmadan geri iletin veya daha fazla tablo yoksanulldeğerini iletin.total_tables: Sağlanan filtrelerle eşleşen toplam tablo sayısı.
Aracılar Şema Keşfi
Sunucu talimatları, analitik SQL yazmadan önce list_databases bir AGENTS veritabanı ortaya çıkardığında Agents Schema belgesinin kanonik AGENTS.ROOT ile run_query bölümlerini okumayı önerir. Bu, aracı için bir rehberdir: otomatik olarak hiçbir meta veri getirilmez, araç sonuçları değişmez ve mevcut ClickHouse izinleri geçerliliğini korur. AGENTS.ROOT eksikse veya erişilemezse, normal keşif ve sorgular kullanılabilir durumda kalır.
Sorgu Parametreleri
Değerleri SQL'den ayrı olarak isteğe bağlı params nesnesi aracılığıyla iletin:
{
"query": "SELECT {id:UInt32} AS id, {name:String} AS name",
"params": {"id": 13, "name": "O'Reilly"}
}
ClickHouse'un {name:Type} yer tutucularını tırnak işareti olmadan kullanın. Açılış ayracını, adı ve iki nokta üst üsteyi bitişik tutun, örneğin {id:UInt32} gibi. İki nokta üst üstten sonraki boşluklar ve tür içindeki boşluklar desteklenir, örneğin {id: UInt32} ve {amount:Decimal(18, 4)} gibi. Desteklenen sürücü sürümleri arasında uyumluluk için adlara bir harf veya alt çizgi ile başlayın ve yalnızca harf, rakam ve alt çizgi kullanın.
Python tarzı %s veya %(name)s biçimlendirme ve sürücünün $name$ ham ikili parametreleri desteklenmez. Yalnızca query içeren çağrılar yine de çalışır. params atlanırsa, null iletilirse veya boş bir nesne iletilirse sorgu bağlanmamış kalır.
Parametre değerleri, bildirilen ClickHouse türüyle eşleşmeleri koşuluyla JSON dizeleri, sayılar, boole değerleri, null veya diziler olabilir:
nulltürüyleNullable(...)kullanın.- JavaScript'in güvenli aralığının dışındaki tam sayıları ondalık dizeler olarak iletin, örneğin
"18446744073709551615"ile{id:UInt64}. Tarihler, zaman damgaları ve tam ondalık sayılar da karşılık gelen ClickHouse türüyle dizeler olarak iletilebilir. - Vektörleri tek bir dizi olarak bağlayın, örneğin
{vector:Array(Float32)}ile"params": {"vector": [0.25, 0.5, 0.75]}. - Diziler içindeki null değerler yüklü sürücüye bağlıdır. clickhouse-connect 1.8.0 ile çalışırlar ancak desteklenen minimum 1.0.0 ile başarısız olurlar.
- JSON listeleri ve nesneleri ClickHouse
TupleveMaptürlerine bağlanamaz.
Eksik değerler ve uyumsuz türler sorgu hataları döndürür. Boş olmayan params ile, çok sayıda sonlandırılmamış {name: yer tutucu başlangıcı taşıyan bir sorgu reddedilir; bu, yorumlardaki veya dize değişmezlerindeki yer tutucu benzeri metinleri de içerir.
Parametreli sorgular, diğer sorgularla aynı yazma korumasını, zaman aşımlarını, iptali ve JSON sonuç kodlamasını kullanır.
Parametre değerleri MCP sunucusunun normal SQL günlük mesajlarının dışında kalır, ancak MCP araç bağımsız değişkenlerinde kalır ve arka uç hatalarında görünebilir. ClickHouse 26.3.20.7, değerleri system.query_log, system.processes ve system.text_log içindeki sorgu metnine yerleştirir. Parametre bağlama bir gizlilik özelliği değildir ve bir araç çağrısında gönderilen vektör değerlerinin sayısını azaltmaz.
Sorguyu Çalıştırmadan Önce Kontrol Etme
run_query ayrıca DESCRIBE ve EXPLAIN ESTIMATE çalıştırır. Her ikisi de isteğe bağlı kontrollerdir: bir sorgunun çıktı sütunlarına ve türlerine ihtiyacınız olduğunda DESCRIBE kullanın ve pahalı olabilecek bir SELECT öncesinde EXPLAIN ESTIMATE kullanın.
DESCRIBE (<query>), sonuç şemasını inceler ve DESCRIBE TABLE ile aynı çıktı sütunu meta verilerini döndürür:
DESCRIBE (SELECT user, sum(amt) FROM events WHERE ts > now() - INTERVAL 30 DAY GROUP BY user)
user String
sum(amt) Decimal(38, 2)
ClickHouse yanıt vermek için sorguyu analiz etmek zorundadır, bu nedenle analiz hataları, yürütme sırasında değil, ClickHouse'un kendi mesajıyla burada ortaya çıkar:
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'
Temiz bir şekilde tanımlanan bir sorgu, çalıştırıldığında bellek sınırı veya uzak sunucu hatası nedeniyle yine de başarısız olabilir ve maliyet hakkında hiçbir şey söylemez.
EXPLAIN ESTIMATE <query>, sorgunun okuyacağı parçaları, satırları ve işaretleri, tablo başına bir satır olacak şekilde döndürür; bu, bir birincil anahtar aramasını tam taramadan ayıran şeydir:
EXPLAIN ESTIMATE SELECT count() FROM events WHERE id = 42
database table parts rows marks
default events 1 8192 1
Bunlar, birincil anahtar ve bölüm budamasından sonra MergeTree ailesi tablolarından tahmini okumalardır. Çalışma süresi veya sonuç boyutu değildir ve diğer tablo motorları kapsanmaz.
Hiçbir ifade sorgu gövdesini çalıştırmaz, ancak analiz her zaman ücretsiz değildir: DESCRIBE (SELECT (SELECT sleep(1))), analiz sırasında skaler alt sorguyu yürütür. Her ikisi de salt okunurdur ve varsayılan CLICKHOUSE_ALLOW_WRITE_ACCESS=false altında çalışır. EXPLAIN ESTIMATE ve DESCRIBE için ClickHouse belgelerine bakın.
chDB Araçları
run_chdb_select_query- chDB gömülü ClickHouse motorunu kullanarak SQL sorguları çalıştırın.
- Girdi:
query(dize): Çalıştırılacak SQL sorgusu. [-9007199254740991, 9007199254740991]dışındaki tam sayılar ondalık dizeler olarak döndürülür.- ETL süreçleri olmadan çeşitli kaynaklardan (dosyalar, URL'ler, veritabanları) doğrudan veri sorgulayın.
- İsteğe bağlı
chdbekstra gerektirir:pip install 'mcp-clickhouse[chdb]'
Sağlık Kontrolü Uç Noktası
HTTP veya SSE taşımasıyla çalışırken, /health adresinde bir sağlık kontrolü uç noktası bulunur. Bu uç nokta:
- Sunucu sağlıklıysa ve ClickHouse'a bağlanabiliyorsa
200 OKdöndürür (gövde:OK) - Sunucu ClickHouse'a bağlanamıyorsa genel bir hata mesajıyla
503 Service Unavailabledöndürür - Bir ClickHouse yoklaması iki saniye içinde tamamlanmazsa
503döndürür. Eşzamanlı istekler tek bir devam eden yoklamayı paylaşır - Tamamlanmış bir yoklama sonucunu bir saniye boyunca yeniden kullanır, böylece hızlı art arda gelen yoklamaların her biri ClickHouse'a bağlanmaz. Bu nedenle bir hata veya kurtarma en fazla bir saniye gecikmeli raporlanabilir
Uç noktaya yapılan GET ve HEAD istekleri kasıtlı olarak kimlik doğrulamasız ve Host ile Origin doğrulamasından muaftır; böylece orkestratör yoklamaları (örn. Kubernetes canlılık/hazır olma, yük dengeleyiciler) ekstra yapılandırma olmadan çalışma zamanında atanan pod veya hedef IP'leri kullanabilir. /health ayrılmıştır ve MCP taşıma yolu olarak kullanılamaz. Yanıt gövdesi, arka uç sürüm dizelerini veya hata ayrıntılarını sızdırmamak için kasıtlı olarak minimum düzeydedir; hataları sunucu günlükleri aracılığıyla ayıklayın.
Örnek:
curl http://localhost:8000/health
# Response: OK
Güvenlik
HTTP/SSE Taşımaları için Kimlik Doğrulama
HTTP veya SSE taşıması kullanırken, kimlik doğrulama varsayılan olarak zorunludur. stdio taşıması (varsayılan), yalnızca standart giriş/çıkış üzerinden iletişim kurduğu için kimlik doğrulama gerektirmez.
Üç kimlik doğrulama modu desteklenir. Birini seçin:
| Mod | Ne zaman kullanılır | Ortam değişkeni |
|---|---|---|
| Statik taşıyıcı belirteci | Basit dağıtımlar, dahili hizmetler | CLICKHOUSE_MCP_AUTH_TOKEN |
| OAuth / OIDC (FastMCP aracılığıyla) | Azure Entra, Google, GitHub, WorkOS vb. | FASTMCP_SERVER_AUTH=<provider-class-path> (+ sağlayıcıya özel FASTMCP_SERVER_AUTH_* değişkenleri) |
| Devre dışı | Yalnızca yerel geliştirme | CLICKHOUSE_MCP_AUTH_DISABLED=true |
HTTP/SSE taşımaları için bunlardan hiçbiri yapılandırılmamışsa başlangıç başarısız olur.
Kimlik Doğrulama Kurulumu
-
Güvenli bir belirteç oluşturun (herhangi bir rastgele dize olabilir):
# Using uuidgen (macOS/Linux) uuidgen # Using openssl openssl rand -hex 32 -
Sunucuyu belirteçle yapılandırın:
export CLICKHOUSE_MCP_AUTH_TOKEN="your-generated-token" -
MCP istemcinizi, isteklere belirteci dahil edecek şekilde yapılandırın:
HTTP/SSE taşımalı Claude Desktop için:
{ "mcpServers": { "mcp-clickhouse": { "url": "http://127.0.0.1:8000", "headers": { "Authorization": "Bearer your-generated-token" } } } }Not:
/healthuç noktası kasıtlı olarak kimlik doğrulamasızdır (yukarıdaki Sağlık Kontrolü Uç Noktası bölümüne bakın). Taşıyıcı belirteç kimlik doğrulamasının kimlik doğrulamasız istekleri gerçekten reddettiğini doğrulamak için, MCP uç noktasının kendisine örn. MCP Inspector ile veya/mcpadresineAuthorizationbaşlığıyla ve başlıksız bir JSON-RPC isteği POST ederek ve kimlik doğrulamasız çağrının401döndürdüğünü doğrulayarak erişin.
FastMCP aracılığıyla OAuth / OIDC
Kimlik sağlayıcıları (Azure Entra, Google, GitHub, WorkOS vb.) içeren üretim dağıtımları için, statik bir belirteç kullanmak yerine kimlik doğrulamayı FastMCP'nin yerleşik kimlik doğrulama sağlayıcılarına devredin. FASTMCP_SERVER_AUTH değişkenini bir FastMCP kimlik doğrulama sağlayıcısının tam sınıf yoluna ayarlayın, sağlayıcıya özel FASTMCP_SERVER_AUTH_* değişkenleriyle birlikte ve CLICKHOUSE_MCP_AUTH_TOKEN değişkenini boş bırakın.
Örnek (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 yerleşik sağlayıcıları için bu FastMCP 2.14.7 ortam öneklerini korur:
| Sağlayıcı sınıf yolu | Sağlayıcı değişken öneki |
|---|---|
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_ |
Öneke, sağlayıcı alan adının büyük harfli halini ekleyin. Her sağlayıcının yapılandırma gereksinimleri için FastMCP belgelerine bakın.
Auth değerleri doğrudan süreç ortamında ayarlandığında, büyük/küçük harf duyarsız olarak öncelik kazanır.
Varsayılan .env yüklemesi, kurulu mcp_clickhouse paket dizininden başlar,
önce sembolik bağlantıları çözer ve dosya sistemi köküne doğru yukarı doğru ilerler. Bulduğu ilk
.env dosyasını yükler ve hiçbiri yoksa hiçbir şey yüklemez. Sunucunun nasıl başlatıldığından bağımsız olarak çalışma dizinini asla okumaz. Bir kaynak kopyası normalde
depo kökü .env dosyasını bulur. Bu dosya ayrıca FASTMCP_SERVER_AUTH ve
sağlayıcı alanlarını da sağlayabilir. Değerleri, açık veya uyumluluk auth
dosyasına göre önceliklidir.
FastMCP 2 uyumluluğu için mcp-clickhouse, eksik sağlayıcı alanlarını çalışma dizinindeki .env dosyasından okur, ancak bu uyumluluk geri dönüşü FASTMCP_SERVER_AUTH seçemez. Süreç tarafından ayarlanan bir FASTMCP_ENV_FILE, bu uyumluluk
geri dönüşünün yerini alır ve hem seçici hem de sağlayıcı alanlarını sağlayabilir. Başlangıçtan önce ayarlayın.
mcp-clickhouse uyumluluk yükleyicisi, bu dosyadan yalnızca FASTMCP_SERVER_AUTH ve
FASTMCP_SERVER_AUTH_* okur, bu nedenle CLICKHOUSE_* ayarlarını ekleyemez.
FastMCP 4, kendi daha geniş ayarları için aynı dosyayı kullanabilir. Özel bir sağlayıcı,
ortamdan türetilmiş yapıcı argümanları almaz ve bağımsız değişkensiz yapılandırmayı desteklemelidir.
Hem keşfedilen hem de çalışma dizinindeki .env dosyalarını güvenilir kimlik doğrulama
yapılandırması olarak ele alın. Paket dizininden dosya sistemi köküne kadar herhangi bir dizinde .env oluşturabilen veya yazabilen herkes, hangi dosyanın keşfedileceğini kontrol edebilir, sağlayıcıyı seçebilir ve alanlarını ayarlayabilir. Çalışma dizini dosyasını yazabilen herkes, süreç ve keşfedilen yapılandırmada bulunmayan tüm sağlayıcı alanlarını kontrol eder; imzalama anahtarları, verenler ve uç noktalar ile istemci sırları dahil. Operatöre ait bir dosyaya işaret eden süreç tarafından ayarlanan bir FASTMCP_ENV_FILE, çalışma dizini geri dönüşünü devre dışı bırakır.
FastMCP 4, varsayılan OAuth proxy istemci deposunu değiştirdi. FastMCP 2'nin varsayılan OAuth proxy depolamasına dayanan dağıtımlar, istemcilerin yeniden kaydolmasını ve yetkilendirmesini gerektirmelidir. Uyumlu özel depolama, statik taşıyıcı belirteçleri ve JWT doğrulaması etkilenmez.
Geliştirme Modu (Kimlik Doğrulamayı Devre Dışı Bırakma)
Yalnızca yerel geliştirme ve test için kimlik doğrulamayı şu şekilde ayarlayarak devre dışı bırakabilirsiniz:
export CLICKHOUSE_MCP_AUTH_DISABLED=true
export CLICKHOUSE_MCP_ALLOWED_HOSTS=127.0.0.1:8000,localhost:8000
UYARI: Bunu yalnızca yerel geliştirme için kullanın. Sunucu herhangi bir ağa maruz kaldığında kimlik doğrulamayı devre dışı bırakmayın.
Yapılandırma
Bu MCP sunucusu hem ClickHouse hem de chDB'yi destekler. İhtiyaçlarınıza göre birini veya her ikisini de etkinleştirebilirsiniz. Python 3.10 ile 3.14 desteklenmektedir. Yerel başlatmalar için Python 3.12 önerilir.
-
Şu konumda bulunan Claude Desktop yapılandırma dosyasını açın:
- macOS'ta:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows'ta:
%APPDATA%/Claude/claude_desktop_config.json
- macOS'ta:
-
Aşağıdakileri ekleyin:
{
"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"
}
}
}
}
Kendi ClickHouse hizmetinize işaret etmek için ortam değişkenlerini güncelleyin.
Veya ClickHouse SQL Playground ile denemek isterseniz aşağıdaki yapılandırmayı kullanabilirsiniz:
{
"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 (gömülü ClickHouse motoru) için aşağıdaki yapılandırmayı ekleyin:
{
"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"
}
}
}
}
Ayrıca ClickHouse ve chDB'yi aynı anda etkinleştirebilirsiniz:
{
"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"
}
}
}
}
-
uvkomut girişini bulun veuvyürütülebilir dosyasının mutlak yolu ile değiştirin. Bu, sunucu başlatılırken doğruuvsürümünün kullanılmasını sağlar. Mac'te bu yoluwhich uvkullanarak bulabilirsiniz. -
Değişiklikleri uygulamak için Claude Desktop'u yeniden başlatın.
İsteğe Bağlı Yazma Erişimi
Varsayılan olarak bu MCP, keşif sırasında yanlışlıkla değişiklik yapılmaması için salt okunur sorgular uygular. DDL veya INSERT ifadelerine izin vermek için CLICKHOUSE_ALLOW_WRITE_ACCESS ortam değişkenini true olarak ayarlayın. ClickHouse örneğinin kendisi yazmaları devre dışı bırakırsa sunucu salt okunur modu uygulamaya devam eder.
Salt okunur mod, ClickHouse kullanıcısının kendi sorgularını, aynı kullanıcıyı kullanan diğer bağlantılardan gelen sorgular dahil, iptal etmesine hâlâ izin verir. Salt okunur modda bile özel bir ClickHouse kullanıcısı kullanın. Birbirlerinin sorgularını iptal etmemesi gereken iş yükleri için ayrı ClickHouse kullanıcıları kullanın.
Yıkıcı İşlem Koruması
Yazma erişimi etkinleştirilmiş olsa bile (CLICKHOUSE_ALLOW_WRITE_ACCESS=true), yıkıcı işlemler güvenlik için ek bir onay bayrağı gerektirir. Kontrol, herhangi bir DROP ifadesini (ALTER TABLE ... DROP PARTITION / DROP PART / DROP COLUMN yan tümceleri dahil), herhangi bir TRUNCATE, DELETE ve UPDATE (hem hafif ifadeler hem de ALTER TABLE ... DELETE / ALTER TABLE ... UPDATE mutasyonları), REPLACE TABLE, CREATE OR REPLACE, ALTER TABLE ... REPLACE PARTITION, ALTER TABLE ... CLEAR COLUMN / CLEAR INDEX / CLEAR PROJECTION ve DETACH ... PERMANENTLY kapsar. Dize değişmezlerindeki, tırnaklı tanımlayıcılardaki, SQL yorumlarındaki ve {name:Type} parametre adlarındaki anahtar kelimeler yok sayılır, bu nedenle kontrolü tetiklemezler veya bir ifadeyi ondan gizlemezler.
Bu kontrol MCP sunucusunda çalışır ve kazalara karşı en iyi çaba gösteren bir korumadır. Bir güvenlik sınırı değildir. Güvenlik sınırı, ClickHouse kullanıcısının yetkileridir. Salt okunur mod (varsayılan) sunucu tarafında readonly=1 aracılığıyla uygulanır. Yıkıcı işlem kapısı sunucu tarafında uygulanmaz.
Yazma modu için MCP sunucusuna yalnızca ihtiyaç duyduğu ayrıcalıklara sahip özel bir ClickHouse kullanıcısı verin:
CREATE USER mcp_agent IDENTIFIED BY '...';
GRANT SELECT, INSERT, CREATE TABLE, ALTER ADD COLUMN ON mydb.* TO mcp_agent;
Bu yetkilerin dışında ayrıcalıklar gerektiren veri değiştiren işlemler, MCP bayraklarından bağımsız olarak sunucu tarafında ACCESS_DENIED ile başarısız olur. Sunucu ayarları max_table_size_to_drop ve max_partition_size_to_drop, ayar kısıtlamalarıyla sabitlenirse patlama yarıçapını da sınırlayabilir.
Yıkıcı işlemleri etkinleştirmek için her iki bayrağı da ayarlayın:
"env": {
"CLICKHOUSE_ALLOW_WRITE_ACCESS": "true",
"CLICKHOUSE_ALLOW_DROP": "true"
}
Bu iki katmanlı yaklaşım, yanlışlıkla silmeyi zorlaştırır:
- Yazma işlemleri (INSERT, CREATE, ALTER ADD COLUMN)
CLICKHOUSE_ALLOW_WRITE_ACCESS=truegerektirir - Yıkıcı işlemler (DROP, TRUNCATE, DELETE, UPDATE ve yukarıdaki listenin geri kalanı) ayrıca
CLICKHOUSE_ALLOW_DROP=truegerektirir
uv Olmadan Çalıştırma (Sistem Python'unu Kullanma)
uv yerine sistem Python kurulumunu kullanmayı tercih ederseniz, paketi PyPI'den kurup doğrudan çalıştırabilirsiniz:
-
Paketi pip kullanarak kurun:
python3 -m pip install mcp-clickhousechDB desteğini de kurmak için:
python3 -m pip install 'mcp-clickhouse[chdb]'En son sürüme yükseltmek için:
python3 -m pip install --upgrade mcp-clickhouse -
Claude Desktop yapılandırmanızı doğrudan Python kullanacak şekilde güncelleyin:
{
"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"
}
}
}
}
Alternatif olarak, kurulu betiği doğrudan kullanabilirsiniz:
{
"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"
}
}
}
}
Not: Python yürütülebilir dosyası veya mcp-clickhouse betiği sistem PATH'inizde değilse tam yolunu kullandığınızdan emin olun. Yolları şu şekilde bulabilirsiniz:
- Python yürütülebilir dosyası için
which python3 - Kurulu betik için
which mcp-clickhouse
Özel Ara Yazılım
Kaynak kodunu değiştirmeden MCP sunucusuna özel ara yazılım ekleyebilirsiniz. FastMCP, MCP protokol mesajlarını (araç çağrıları, kaynak okumaları, istemler vb.) kesmenize ve işlemenize olanak tanıyan bir ara yazılım sistemi sağlar.
Nasıl Kullanılır
Middlewaregenişleten ara yazılım sınıfları ve birsetup_middleware(mcp)işlevi içeren bir Python modülü oluşturun:
# 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_MODULEortam değişkenini modül adına ayarlayın (.pyuzantısı olmadan):
{
"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"
}
}
}
}
- Ara yazılım modülünüzün Python içe aktarma yolunda olduğundan emin olun (ör. MCP sunucusunun çalıştığı dizinde veya bir paket olarak kurulu).
Örnek Ara Yazılım
example_middleware.py içinde yaygın desenleri gösteren bir örnek ara yazılım modülü sağlanmıştır:
- Tüm MCP isteklerini günlüğe kaydetme
- Özellikle araç çağrılarını günlüğe kaydetme
- İstek işleme süresini ölçme
Örneği kullanmak için:
"env": {
"MCP_MIDDLEWARE_MODULE": "example_middleware"
}
Ara Yazılım Yetenekleri
Middleware temel sınıfı, farklı MCP işlemleri için kancalar sağlar:
on_message(context, call_next)- Tüm mesajlar için çağrılıron_request(context, call_next)- Tüm istekler için çağrılıron_notification(context, call_next)- Tüm bildirimler için çağrılıron_call_tool(context, call_next)- Bir araç yürütüldüğünde çağrılıron_read_resource(context, call_next)- Bir kaynak okunduğunda çağrılıron_get_prompt(context, call_next)- Bir istem alındığında çağrılıron_list_tools(context, call_next)- Araçlar listelenirken çağrılıron_list_resources(context, call_next)- Kaynaklar listelenirken çağrılıron_list_resource_templates(context, call_next)- Kaynak şablonları listelenirken çağrılıron_list_prompts(context, call_next)- İstemler listelenirken çağrılır
Her kanca, mesajı ve meta verileri içeren bir MiddlewareContext nesnesi ve ardışık düzeni sürdürmek için bir call_next işlevi alır.
Bağlam Durumu ile Dinamik İstemci Yapılandırması
Ara yazılım, CLIENT_CONFIG_OVERRIDES_KEY bağlam durumu anahtarını kullanarak ClickHouse istemci yapılandırmasını istek başına geçersiz kılabilir. Sunucu, bu geçersiz kılmaları ortam değişkenlerinden gelen temel yapılandırmayla birleştirir.
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)
Bu, dinamik zaman aşımı ayarlamaları, kiracıya özel yönlendirme veya kullanıcı başına bağlantı ayarları gibi gelişmiş kullanım durumlarını etkinleştirir.
Durum değeri bir sözlük olmalıdır. İç içe settings ve generic_args değerleri eşlemeler olmalı ve temel yapılandırmayla birleştirilir. Geçersiz değerler, bir ClickHouse istemcisi oluşturulmadan önce araç çağrısını başarısız kılar. CLICKHOUSE_ROLE, geçersiz kılma açıkça settings.role sağlamadıkça etkin kalır. Üst düzey role ve ch_role anahtarları ile generic_args altındaki aynı anahtarlar reddedilir.
verify, ca_cert, client_cert, client_cert_key, tls_mode, server_host_name ve pool_mgr yalnızca üst düzey geçersiz kılmalar olarak ayarlayın. generic_args altına yerleştirilemezler. Özel bir pool_mgr, yönetilen CA veya istemci sertifikası ayarlarıyla birleştirilemez. DSN sorgu parametreleri bu anahtarları ayarlayamaz ve bir DSN chdb arka ucunu seçemez. Bağlantıyı değiştirmek için açık üst düzey host, port, username, password, database ve secure geçersiz kılmalarını kullanın. İletilen bir DSN, doldurulmuş temel bağlantı alanlarının yerini almaz veya TLS seçmez. Boş alanları doldurabilir ve query_limit gibi desteklenen sorgu parametrelerini sağlayabilir. secure ve verify geçersiz kılmaları boole değerlerini veya true ve false dizelerini kabul eder. verify ayrıca proxy kabul eder; bu, tls_mode ayarlanmadığında tls_mode: proxy gibi davranır ve bu nedenle ortam parolasıyla Temel kimlik doğrulaması kullanır. Bir secure geçersiz kılması, eşleşen https veya http arabirimini seçer ve bağlantı noktasını değiştirmez. Açık bir interface geçersiz kılması http veya https olmalı ve secure ile uyumlu olmalıdır. Geçersiz kılmaları birleştirdikten sonra, varsayılan ve mutual istemci sertifikası modları parolayı atlar. proxy ve strict modları, geçersiz kılma kendi kimlik bilgilerini sağlamadıkça ortam parolasıyla Temel kimlik doğrulaması kullanır.
Bu geçersiz kılmaları güvenilir ara yazılım girdisi olarak ele alın. Ara yazılım, istekten türetilen değerleri ayarlamadan önce kimlik doğrulamalı ve yetkilendirmelidir. FastMCP'nin değeri istek yerel durumunda tutması için serializable=False kullanın. Varsayılan serializable=True oturum durumunu saklar ve sunucu tarafından reddedilir. Sunucu, engelleyici veritabanı işini dağıtmadan önce değerin anlık görüntüsünü alır. Kiracı verilerini oturum kapsamlı Bağlam durumunda saklamayın. Reddedilen bir oturum kapsamlı geçersiz kılma, eski bir MCP oturumuna ekli kalır ve istemci yeniden bağlanana kadar o oturumdaki sonraki araç çağrılarının başarısız olmasına neden olur. İstek başına ClickHouse rolü, bağlantı yapılandırmasıdır, kiracı yetkilendirme sınırı değildir. Kiracı yalıtımını ClickHouse kullanıcıları, rolleri ve yetkileriyle zorunlu kılın.
Geliştirme
-
test-servicesdizininde ClickHouse kümesini başlatmak içindocker compose up -dçalıştırın. -
Deponun kökünde bir
.envdosyasına aşağıdaki değişkenleri ekleyin.
Not: Bu bağlamda default kullanıcısının kullanımı yalnızca yerel geliştirme amaçlıdır.
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
-
Bağımlılıkları yüklemek için
uv synckomutunu çalıştırın.uvyüklemek için buradaki talimatları izleyin. Ardındansource .venv/bin/activateişlemini yapın. -
MCP Inspector ile kolay test için, MCP sunucusunu başlatmak üzere
uv run fastmcp dev inspector mcp_clickhouse/mcp_server.py:mcpkomutunu çalıştırın. -
HTTP taşıması ve sağlık kontrolü uç noktasıyla test etmek için:
# 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
Kod Düzeni
Paket, düz bir modül düzeni kullanır. Sunucu derlemesi ve kaydı için mcp_server.py ile başlayın, ardından uygulamayı sahip olduğu modüle kadar takip edin.
| Modül | Sorumluluk |
|---|---|
| mcp_server.py, main.py | Başlangıç derlemesi, araç ve komut kaydı, kapanış koordinasyonu ve CLI başlangıcı |
| clients.py | İstek yapılandırması, önbelleğe alınmış ClickHouse bağlantıları ve istemci kiralamaları |
| queries.py | Sorgu yürütme, iptal ve yıkıcı işlem korumaları |
| metadata.py | Veritabanı ve tablo keşfi, meta veri modelleri ve sayfalama |
| chdb_backend.py, chdb_prompt.py | İsteğe bağlı chDB başlatma, sorgu yürütme ve komut içeriği |
| health.py, executors.py | Sağlık kontrolleri ve önbellekleme ile sunucu işlemlerinde kullanılan çalışan havuzları |
| auth.py, transport.py, http_security.py | Dotenv yükleme, kimlik doğrulama, HTTP/SSE uygulama kurulumu ve Host/Origin doğrulaması |
| mcp_env.py, serialization.py | Ortam yapılandırması ve JSON sonuç kodlaması |
| mcp_middleware_hook.py, skills_advisor.py | Özel ara katman yükleme ve sunucu talimatları |
Her sunucu derlemesi kendi çalışan havuzlarına, istemci önbelleğine, aktif sorgularına, sayfalama önbelleğine, sağlık durumuna ve chDB arka ucuna sahiptir. Çalışan ve istemci temizliği işlem çıkışında çalışır. Paket içe aktarımları, çıkarılmış bir modül ilk içe aktarıldığında bile varsayılan sunucuyu başlatır.
Testlerde, kodun bir bağımlılığı okuduğu modülü veya sahip örneğini yamalayın. Örneğin, istemci oluşturma için mcp_clickhouse.clients.clickhouse_connect.get_client öğesini yamalayın. mcp_server.py içindeki uyumluluk içe aktarımları, bir uygulamanın kullandığı bağlamalardan ayrı bağlamalar olabilir.
Ortam Değişkenleri
Yapılandırma bağımsız gruplara ayrılmıştır. Bunları karıştırmak, hata ayıklaması zor bağlantı hatalarının yaygın bir nedenidir:
| Grup | Değişkenler | Kontroller |
|---|---|---|
| ClickHouse veritabanı bağlantısı | CLICKHOUSE_HOST, CLICKHOUSE_PORT, CLICKHOUSE_SECURE, CLICKHOUSE_VERIFY, sertifika değişkenleri | Bu MCP sunucusunun ClickHouse kümenize HTTP arayüzü üzerinden nasıl bağlandığı |
| MCP sunucusu / taşıma | CLICKHOUSE_MCP_*, FASTMCP_SERVER_AUTH, FASTMCP_SERVER_AUTH_*, FASTMCP_ENV_FILE | MCP taşıması, kimlik doğrulama ve sorgu aracı yürütme sınırları |
| Ara katman / chDB | MCP_MIDDLEWARE_MODULE, CHDB_* | İsteğe bağlı uzantılar |
[!IMPORTANT]
CLICKHOUSE_SECURE,CLICKHOUSE_VERIFY,CLICKHOUSE_CA_CERT,CLICKHOUSE_CLIENT_CERT,CLICKHOUSE_CLIENT_CERT_KEY,CLICKHOUSE_TLS_MODEveCLICKHOUSE_PORTyalnızca giden ClickHouse veritabanı bağlantısı için geçerlidir. Gelen MCP HTTP/SSE uç noktası için TLS, istemci sertifikaları, bağlantı noktaları veya kimlik doğrulamayı yapılandırmazlar.Örnek: MCP sunucusu Kubernetes'te TLS'yi sonlandıran bir girişin arkasında çalışıyorsa, bu bir MCP taşıma konusudur.
CLICKHOUSE_SECUREdeğerini, podun ClickHouse'un kendisine nasıl ulaştığıyla uyumlu tutun (HTTPS →true, düz HTTP →false). MCP sunucusu bir girişin arkasında olduğu içinCLICKHOUSE_SECURE=falseayarlamak, sunucunun ClickHouse'a HTTP üzerinden bağlanmasına neden olur—genellikle yalnızca HTTPS olan bir bağlantı noktasına—ve sunucu günlüklerinde anlaşılmaz HTTP/TLS hataları üretir.
ClickHouse veritabanı bağlantısı
Bu değişkenler clickhouse-connect HTTP istemcisini ve run_query, list_databases ve list_tables gibi ClickHouse destekli araçların davranışını yapılandırır.
mcp-clickhouse, 1.0.0'dan başlayarak clickhouse-connect 1.x gerektirir.
Zorunlu Değişkenler
CLICKHOUSE_HOST: ClickHouse sunucunuzun ana bilgisayar adı (veritabanı uç noktası, MCP sunucusu bağlama adresi değil)CLICKHOUSE_USER: ClickHouse kimlik doğrulaması için kullanıcı adıCLICKHOUSE_PASSWORD: ClickHouse kimlik doğrulaması için parolaCLICKHOUSE_CLIENT_CERTvarsayılanı kullanmadığı veya"mutual"TLS modu olmadığı sürece gereklidir- Varsayılan veya
"mutual"modunda sertifika kimlik doğrulaması kullanılır ve parola gönderilmez
[!CAUTION] MCP veritabanı kullanıcınıza, veritabanınıza bağlanan herhangi bir harici istemci gibi davranmanız ve çalışması için gereken minimum ayrıcalıkları vermeniz önemlidir. Varsayılan veya yönetici kullanıcıların kullanımı her zaman kesinlikle kaçınılmalıdır.
İsteğe Bağlı Değişkenler
CLICKHOUSE_PORT: ClickHouse sunucunuzun HTTP arayüz bağlantı noktası- Varsayılan:
CLICKHOUSE_SECURE=trueise8443,CLICKHOUSE_SECURE=falseise8123 - Standart olmayan bir bağlantı noktası kullanılmadığı sürece genellikle ayarlanması gerekmez
- HTTP arayüz bağlantı noktası olmalıdır,
clickhouse-clienttarafından kullanılan yerel TCP protokol bağlantı noktası değil - Yaygın değerler:
- HTTP:
8123(düz) /8443(TLS) — bu sunucu ve ClickHouse Cloud HTTPS tarafından kullanılır - Yerel TCP (burada desteklenmez):
9000(düz) /9440(TLS) —clickhouse-clienttarafından kullanılır
- HTTP:
- Sunucu
Port 9000 is for clickhouse-client programile yanıt verirse, yerel protokole işaret ediyorsunuz; HTTP bağlantı noktasına geçin (8123/8443veya dağıtımınızın HTTP eşlemesi)
- Varsayılan:
CLICKHOUSE_ROLE: Kimlik doğrulama için kullanılacak ClickHouse rolü- Varsayılan: Yok
- Kullanıcınız belirli bir rol gerektiriyorsa bunu ayarlayın
CLICKHOUSE_SECURE: ClickHouse veritabanı bağlantısı için HTTPS'yi etkinleştirin (MCP istemcileri için değil)- Varsayılan:
"true" - Yalnızca MCP sunucusu ClickHouse'a düz HTTP üzerinden ulaştığında
"false"olarak ayarlayın (bağlantı noktası8123olan yerel Docker Compose için tipik) - ClickHouse Cloud ve herhangi bir HTTPS veritabanı uç noktası için
"true"bırakın—MCP sunucusunun kendisi HTTP, stdio veya TLS'yi ayrıca sonlandıran bir giriş üzerinden sunulsa bile - Bu bayrağı veritabanı bağlantı noktasıyla eşleştirmemek (örn. bağlantı noktası
8443karşısındaCLICKHOUSE_SECURE=false) sık yapılan bir kurulum hatasıdır ve genellikle net bir "yanlış şema" mesajı yerine kafa karıştırıcı HTTP istemci hataları olarak ortaya çıkar
- Varsayılan:
CLICKHOUSE_VERIFY: ClickHouse HTTPS bağlantısı için SSL sertifika doğrulamasını etkinleştirin/devre dışı bırakın- Varsayılan:
"true" - Sertifika doğrulamasını devre dışı bırakmak için
"false"olarak ayarlayın (üretim için önerilmez) - TLS sertifikaları: Paket, başlangıçta
truststore.inject_into_ssl()aracılığıyla işletim sistemi güven deposunu kullanır.MCP_CLICKHOUSE_TRUSTSTORE_DISABLE=1ile enjeksiyon devre dışı bırakılırsa veya başarısız olursa Python'un varsayılan SSL işlemesi kullanılır.
- Varsayılan:
MCP_CLICKHOUSE_TRUSTSTORE_DISABLE: TLS için işlem genelindeki işletim sistemi güven deposu entegrasyonunu devre dışı bırakın- Varsayılan: ayarlanmamış (güven deposu entegrasyonu etkin)
- Başlangıçtan önce tam olarak
"1"olarak ayarlayıntruststore.inject_into_ssl()atlamak ve Python'un varsayılan SSL sertifika işlemesini kullanmak için. Diğer değerler entegrasyonu devre dışı bırakmaz. - Bu, sertifika doğrulamasını devre dışı bırakmaz.
CLICKHOUSE_VERIFYyine de ClickHouse HTTPS bağlantısı için doğrulamayı kontrol eder.
CLICKHOUSE_CA_CERT: ClickHouse HTTPS bağlantısı için PEM CA sertifika paketinin yolu- Varsayılan: Yok (güven deposu enjeksiyonu devre dışı bırakılmadıkça veya başarısız olmadıkça işletim sistemi güven deposunu kullanır)
- Bir ClickHouse sunucusu veya özel proxy, özel bir CA tarafından imzalanmış bir sertifika sunduğunda bunu tek başına kullanın. Bu, sunucu sertifikası doğrulamasını değiştirir ve istemci sertifikası kimlik doğrulamasını etkinleştirmez.
CLICKHOUSE_SECURE=trueveCLICKHOUSE_VERIFY=truegerektirir
CLICKHOUSE_CLIENT_CERT: ClickHouse HTTPS bağlantısı için PEM istemci sertifikasının yolu- Varsayılan: Yok
- Dosya ayrıca özel anahtarı da içerebilir. Aksi takdirde
CLICKHOUSE_CLIENT_CERT_KEYayarlayın. - ClickHouse kullanıcısı yine de
CLICKHOUSE_USER'dan gelir.
CLICKHOUSE_CLIENT_CERT_KEY:CLICKHOUSE_CLIENT_CERTiçin PEM özel anahtarının yolu- Varsayılan: Yok
- Özel anahtar istemci sertifika dosyasına dahil edildiğinde isteğe bağlıdır
CLICKHOUSE_CLIENT_CERTolmadan kullanılamaz
CLICKHOUSE_TLS_MODE: clickhouse-connect'inCLICKHOUSE_CLIENT_CERTnasıl kullandığı- Varsayılan: Yok, bir istemci sertifikası ayarlandığında
"mutual"gibi davranır "mutual": ClickHouse X.509 kullanıcı kimlik doğrulaması için istemci sertifikasını kullanın.CLICKHOUSE_PASSWORDisteğe bağlıdır ve gönderilmez."proxy": İstemci sertifikasını TLS sonlandıran bir proxy'ye sunun, ardından ClickHouse Temel kimlik doğrulamasını kullanın.CLICKHOUSE_PASSWORDgereklidir."strict": ClickHouse sunucusu TLS katmanında bir tane gerektirdiği için istemci sertifikasını sunun, ardından ClickHouse Temel kimlik doğrulamasını kullanın.CLICKHOUSE_PASSWORDgereklidir. Bu mod, sunucu sertifikası doğrulamasını güçlendirmez.CLICKHOUSE_VERIFYbu doğrulamayı kontrol eder.- clickhouse-connect,
"proxy"ve"strict"aynı şekilde ele alır. İki ad, amacı belgeler. - Değerler kırpılır ve büyük/küçük harfe duyarsızdır. Boş bir değer ayarlanmamış olarak kabul edilir. Diğer değerler, ilk ClickHouse aracı çağrısında veya
/healthyoklamasında bir ClickHouse istemcisi oluşturulmadan önce reddedilir. CLICKHOUSE_CLIENT_CERTgerektirir. Tüm istemci sertifikası seçenekleriCLICKHOUSE_SECURE=truegerektirir.
- Varsayılan: Yok, bir istemci sertifikası ayarlandığında
CLICKHOUSE_SERVER_HOST_NAME: ClickHouse bağlantısında SNI geçersiz kılma ve sertifika doğrulaması için sunucu ana bilgisayar adı- Varsayılan: Yok (bağlantı ana bilgisayar adını kullanır)
- Bu, sertifika ana bilgisayar adının bağlantı ana bilgisayar adından farklı olduğu proxy'ler veya yük dengeleyiciler üzerinden bağlanırken kullanışlıdır. Ayarlandığında, bu ana bilgisayar adı hem TLS el sıkışması sırasında SNI (Sunucu Adı Göstergesi) hem de sertifika ana bilgisayar adı doğrulaması için kullanılır.
CLICKHOUSE_PROXY_PATH: ClickHouse HTTP uç noktası için URL yolu öneki- Varsayılan: Yok
- ClickHouse HTTP arayüzü bir ters proxy'nin arkasında bir yol öneki altında sunulduğunda bunu ayarlayın (örneğin,
/clickhouse)
CLICKHOUSE_CONNECT_TIMEOUT: ClickHouse istemcisi için saniye cinsinden bağlantı zaman aşımı- Varsayılan:
"30" - Bağlantı zaman aşımları yaşıyorsanız bu değeri artırın
- Varsayılan:
CLICKHOUSE_SEND_RECEIVE_TIMEOUT: ClickHouse istemcisi için saniye cinsinden gönderme/alma zaman aşımı- Varsayılan:
300veyaCLICKHOUSE_MCP_QUERY_TIMEOUT + 5'nin düşük olanı, böylece çalışan iş parçacıkları bir sorgu zaman aşımından kısa süre sonra engeli kaldırır - Açıkça ayarlanırsa, değer olduğu gibi kullanılır (örn. uzun süreli sorgular için
"300")
- Varsayılan:
CLICKHOUSE_DATABASE: Kullanılacak varsayılan ClickHouse veritabanı- Varsayılan: Yok (sunucu varsayılanını kullanır)
- Belirli bir veritabanına otomatik bağlanmak için bunu ayarlayın
CLICKHOUSE_ENABLED: ClickHouse veritabanı araçlarını etkinleştirin/devre dışı bırakın- Varsayılan:
"true" - Yalnızca chDB kullanırken ClickHouse araçlarını devre dışı bırakmak için
"false"olarak ayarlayın
- Varsayılan:
CLICKHOUSE_ALLOW_WRITE_ACCESS: ClickHouse'a yazma işlemlerine (DDL ve DML) izin ver- Varsayılan:
"false" - Yıkıcı olmayan DDL ve DML'ye (CREATE, INSERT, ALTER ADD COLUMN) izin vermek için
"true"olarak ayarlayın. Yıkıcı ifadeler ayrıcaCLICKHOUSE_ALLOW_DROP=truegerektirir - Devre dışı bırakıldığında (varsayılan), sorgular veri değişikliklerini önlemek için
readonly=1ayarıyla çalışır
- Varsayılan:
CLICKHOUSE_ALLOW_DROP: Yıkıcı işlemlere izin ver (herhangi birDROPveyaTRUNCATE,DELETEveALTER TABLEvaryantları dahilUPDATE,REPLACE TABLE/REPLACE PARTITION/CREATE OR REPLACE,CLEAR COLUMN/CLEAR INDEX/CLEAR PROJECTIONveDETACH ... PERMANENTLY)- Varsayılan:
"false" - Yalnızca
CLICKHOUSE_ALLOW_WRITE_ACCESS=truede ayarlandığında etkili olur - Bu kapı, MCP sunucusunda en iyi çaba gösteren bir kaza korumasıdır, bir güvenlik sınırı değildir. Gerçek uygulama için ClickHouse kullanıcısının yetkilerini kısıtlayın (bkz. Yıkıcı İşlem Koruması)
- Varsayılan:
ClickHouse TLS sertifika dosyaları
Sertifika değişkenleri dosya yollarını içerir, PEM içeriklerini değil. mcp-clickhouse bu yolları clickhouse-connect'e iletir. Docker veya Kubernetes için sertifikayı ve özel anahtarı salt okunur dosyalar olarak bağlayın ve kapsayıcı içindeki yollarını kullanın. Özel bir anahtarı bir imaja gömmeyin, kaynak kontrolüne işlemeyin veya içeriğini bir ortam değişkenine koymayın.
mutual modunda, yapılandırılan istemci sertifikası bu mcp-clickhouse sürecini CLICKHOUSE_USER olarak tanımlar. Gelen MCP istemcilerinin kimliğini doğrulamaz veya kimliklerini ClickHouse'a iletmez. MCP taşıma kimlik doğrulamasını ayrıca yapılandırın.
Aynı yolda bir sertifikayı veya anahtarı değiştirdikten sonra, acil rotasyon veya iptal gerektiğinde mcp-clickhouse'u yeniden başlatın. Önbelleğe alınmış istemciler mevcut TLS bağlantılarını koruyabilir ve önbellek dosya içeriklerini veya değişiklik zamanlarını izlemez.
ClickHouse Cloud, veritabanı kullanıcıları için X.509 istemci sertifikası kimlik doğrulamasını desteklemez. ClickHouse Cloud için CLICKHOUSE_USER ve CLICKHOUSE_PASSWORD kullanın. Bir uç noktanın önündeki özel bir proxy, özel bir CA tarafından imzalanmış bir sertifika sunduğunda bir CA sertifikası yine de yararlı olabilir.
MCP sunucusu ve taşıma
Bu değişkenler MCP sürecinin kendisini kontrol eder; taşıma, kimlik doğrulama ve sorgu aracı yürütme sınırlarını içerir. Bunlar yukarıdaki ClickHouse veritabanı ayarlarından bağımsızdır. Ayrıca bkz. HTTP/SSE Taşımaları için Kimlik Doğrulama.
CLICKHOUSE_MCP_SERVER_TRANSPORT: MCP sunucusu için taşıma yöntemini ayarlar- Varsayılan:
"stdio" - Geçerli seçenekler:
"stdio","http","sse". Bu, MCP Inspector gibi araçlarla yerel geliştirme için kullanışlıdır. stdioClaude Desktop için tipiktir;http/ssebir ağ dinleyicisi açığa çıkarır (aşağıdaki bağlama ana bilgisayarını/bağlantı noktasını kullanır)"sse"kullanımdan kaldırılmış bağımsız HTTP+SSE taşımasını seçer ve bir uyarı günlüğe kaydeder. Yeni dağıtımlarda Streamable HTTP için"http"kullanın.
- Varsayılan:
CLICKHOUSE_MCP_BIND_HOST: HTTP veya SSE taşıması kullanılırken MCP sunucusunun bağlanacağı ana bilgisayar- Varsayılan:
"127.0.0.1" - Tüm ağ arayüzlerine bağlanmak için
"0.0.0.0"olarak ayarlayın (Docker veya uzaktan erişim için kullanışlıdır) - Yalnızca taşıma
"http"veya"sse"olduğunda kullanılır —CLICKHOUSE_HOSTile ilgili değildir
- Varsayılan:
CLICKHOUSE_MCP_BIND_PORT: HTTP veya SSE taşıması kullanılırken MCP sunucusunun bağlanacağı bağlantı noktası- Varsayılan:
"8000" - Yalnızca taşıma
"http"veya"sse"olduğunda kullanılır —CLICKHOUSE_PORTile ilgili değildir
- Varsayılan:
CLICKHOUSE_MCP_QUERY_TIMEOUT: Sorgu aracı çağrıları için saniye cinsinden zaman aşımı- Varsayılan:
"30" - Ağır sorgular için
Query timed out after ...hataları görürseniz bunu artırın - Bir sorgu zaman aşımına uğradığında, sunucu onu
KILL QUERYile iptal etmeye çalışır CLICKHOUSE_SEND_RECEIVE_TIMEOUTaçıkça ayarlanmadıkça, HTTP okuma zaman aşımı bu değer artı beş saniye ile sınırlandırılır
- Varsayılan:
CLICKHOUSE_MCP_MAX_WORKERS: Maksimum eşzamanlı sorgu çalışan iş parçacığı sayısı- Varsayılan:
"10" - İş yükünüz çok sayıda eşzamanlı araç çağrısı gerektiriyorsa artırın
- Meta veri araçları,
min(4, CLICKHOUSE_MCP_MAX_WORKERS)iş parçacığına sahip ayrı bir havuz kullanır; böylece şema keşfi sorguları geciktiremez
- Varsayılan:
CLICKHOUSE_MCP_AUTH_TOKEN: HTTP/SSE taşımaları için statik taşıyıcı belirteci- Varsayılan: Yok
CLICKHOUSE_MCP_AUTH_TOKEN,FASTMCP_SERVER_AUTHveyaCLICKHOUSE_MCP_AUTH_DISABLED=truedeğerlerinden biri HTTP/SSE taşımaları için zorunluduruuidgenveyaopenssl rand -hex 32kullanarak oluşturun- İstemciler bu belirteci
Authorization: Bearer <token>başlığında göndermelidir
FASTMCP_SERVER_AUTH: Kimlik doğrulamayı bir FastMCP auth sağlayıcısına devredin- Varsayılan: Yok
- Değer, bir AuthProvider alt sınıfının tam sınıf yoludur, ör.
fastmcp.server.auth.providers.azure.AzureProviderveyafastmcp.server.auth.providers.google.GoogleProvider - Ayarlandığında, mcp-clickhouse sağlayıcıyı mevcut
FASTMCP_SERVER_AUTH_*ortam değişkenlerinden yükler; bu moddaCLICKHOUSE_MCP_AUTH_TOKENayarını boş bırakın - Özel sağlayıcılar ortamdan türetilmiş yapıcı bağımsız değişkenleri almaz ve bağımsız değişkensiz yapılandırmayı desteklemelidir
- FastMCP 4 artık Supabase HS256 doğrulamasını desteklemiyor. Supabase dağıtımları RS256 veya ES256 kullanmalıdır.
FASTMCP_ENV_FILE:FASTMCP_SERVER_AUTHve sağlayıcıya özgü ortam değişkenlerini içeren isteğe bağlı dosya- Varsayılan: Yok. Ayarlanmadığında, uyumluluk yükleyicisi eksik sağlayıcı alanlarını çalışma dizinindeki
.envdosyasından okur. Bu geri dönüştenFASTMCP_SERVER_AUTHokumaz - Başlangıçtan önce işlem ortamında ayarlayın. Varsayılan
.envdosyasından yüklenen bir değer, uyumluluk yükleyicisini yönlendiremez - İşlem tarafından ayarlanırsa, bu dosya hem
FASTMCP_SERVER_AUTHhem de sağlayıcı alanlarını sağlayabilir ve çalışma dizini geri dönüşünün yerini alır - İşlem ortamı değerleri büyük/küçük harfe duyarsız olarak önceliklidir
- mcp-clickhouse uyumluluk yükleyicisi bu dosyayı yalnızca HTTP/SSE kimlik doğrulaması oluştururken okur ve yalnızca
FASTMCP_SERVER_AUTHveFASTMCP_SERVER_AUTH_*girdilerini okur. FastMCP 4, daha geniş ayarları için aynı dosyayı okuyabilir - Varsayılan
.envyüklemesi ayrıdır. Kurulumcp_clickhousepaket dizininde başlar, sembolik bağlantıları çözer, dosya sistemi köküne doğru yukarı yürür ve bulunan ilk.envdosyasını veya hiçbir şeyi yükler. Başlatma yönteminden bağımsız olarak çalışma dizinini asla okumaz. Bu dosya, diğer sunucu ayarlarıyla birlikteFASTMCP_SERVER_AUTHve sağlayıcı alanlarını sağlayabilir. Bir kaynak kontrolü kopyası normalde depo kökü.envdosyasını bulur
- Varsayılan: Yok. Ayarlanmadığında, uyumluluk yükleyicisi eksik sağlayıcı alanlarını çalışma dizinindeki
CLICKHOUSE_MCP_AUTH_DISABLED: HTTP/SSE taşımaları için kimlik doğrulamayı devre dışı bırakır- Varsayılan:
"false"(kimlik doğrulama etkindir) - Yalnızca yerel geliştirme/test için kimlik doğrulamayı devre dışı bırakmak için
"true"olarak ayarlayın - UYARI: Yalnızca yerel geliştirme için kullanın. Ağlara maruz kaldığında devre dışı bırakmayın
- Varsayılan:
CLICKHOUSE_MCP_ALLOWED_HOSTS: HTTP/SSE sunucusunun yanıt verdiği virgülle ayrılmışHostbaşlık değerleri- Geri döngü bağlaması için varsayılan:
127.0.0.1,localhostve[::1]değerlerinin çıplak ve herhangi bir bağlantı noktası biçimleri - Ayarlanırsa, değer en az bir Host girdisi içermelidir.
- Somut bir geri döngü olmayan bağlama adresi, varsayılan olarak bu adrese ve yapılandırılan bağlantı noktasına ayarlanır.
0.0.0.0veya::gibi bir joker karakter bağlaması, genel Host çıkarılamadığı için açık ve boş olmayan bir değer gerektirir. - Host doğrulaması, DNS yeniden bağlamaya karşı derinlemesine bir savunmadır. Aşağıdaki kaynak doğrulaması MCP tarafından ayrıca gereklidir.
- Girdiler tamdır (
localhost:8000) veya herhangi bir bağlantı noktasını kabul eder (localhost:*). Örnek:CLICKHOUSE_MCP_ALLOWED_HOSTS=127.0.0.1:8000,localhost:8000 host:*biçimi yalnızca bir bağlantı noktası taşıyan değerlerle eşleşir. Bağlantı noktası olmayan bir Host (istemcinin:80/:443değerini atladığı standart bağlantı noktalı bir dağıtım) ayrıca çıplak bir tam girdi (example.com) olarak listelenmelidir.- Eşleşmeyen veya eksik
Hostbaşlığına sahip istekler421 Misdirected Requestalır./healthadresine yapılan GET ve HEAD istekleri, orkestratör yoklama problarının çalışmaya devam etmesi için Host ve Origin doğrulamasından muaftır. - Bir ters proxy arkasında, orijinal
Hostbaşlığını korumayı tercih edin. Bunun yerine proxy'nin gönderdiği yukarı akışHostdeğerini listeleyebilirsiniz.fastmcp rungibi bir başlatıcı uzaktan erişim için bağlama adresini geçersiz kıldığında açık bir liste ayarlayın. - mcp-clickhouse, FastMCP'nin ayrı Host ve Origin korumasını zorla kapatır.
FASTMCP_HTTP_HOST_ORIGIN_PROTECTION,FASTMCP_HTTP_ALLOWED_HOSTSveFASTMCP_HTTP_ALLOWED_ORIGINSuygulanmaz.CLICKHOUSE_MCP_ALLOWED_HOSTSveCLICKHOUSE_MCP_ALLOWED_ORIGINSyetkilidir.
- Geri döngü bağlaması için varsayılan:
CLICKHOUSE_MCP_TRUSTED_PROXIES:X-Forwarded-*başlıklarına güvenilen proxy IP adresleri veya CIDR ağları- Varsayılan: Yok.
X-Forwarded-Hostyok sayılır.X-Forwarded-ForveX-Forwarded-Protoiçin mevcut Uvicorn işlemesi değişmez. - Girdiler IP adresleri veya CIDR ağları olmalıdır, ör.
127.0.0.1,10.20.0.0/24,2001:db8::1. CIDR'ler ağ adreslerini kullanmalıdır, bu nedenle10.20.0.1/24reddedilir. Ana bilgisayar adları, kapsamlı IPv6 adresleri,*,0.0.0.0/0ve::/0de reddedilir. - Güven, anında ham soket eşine dayanır. Başka bir eşten gelen bir istek veya istemci adresi olmayan bir istek,
X-Forwarded-Hostdeğerini yok sayar veHostdeğerini doğrular. - Güvenilir bir eş, boş olmayan bir değer içeren tam olarak bir
X-Forwarded-Hostbaşlığı gönderebilir. Yinelenen alanlar, boş değerler ve virgülle ayrılmış listeler421 Misdirected Requestalır. Başlık yoksa,Hostdoğrulanır. - Mümkün olan en dar adresi veya ağı kullanın. MCP sunucusuna yalnızca yapılandırılmış aralıklardaki proxy'ler aracılığıyla erişilebilmelidir. Güvenilen her proxy, istemci tarafından sağlanan
X-Forwarded-HostveX-Forwarded-Protodeğerlerini kaldırmalı ve üzerine yazmalı ve doğrulanmış bağlantı eşindenX-Forwarded-Foroluşturmalıdır. - Yerleşik sunucu ve
fastmcp run, Uvicorn'un dış proxy başlığı işlemesini devre dışı bırakır, Host'u ham eşden doğrular ve ardındanX-Forwarded-ForveX-Forwarded-Protouygular. Bu moddauvicorn_config["proxy_headers"]öğesini açıkça etkinleştirmek başlatmayı başarısız kılar. - Doğrudan ASGI gömme, dış ASGI sunucusunda proxy başlığı işlemesini devre dışı bırakmalı ve
mcp.http_app(raw_client_address_preserved=True)çağırmalıdır. Bu açık onaylama olmadan, güvenilir proxy'ler yapılandırıldığında uygulama oluşturma başarısız olur.
- Varsayılan: Yok.
CLICKHOUSE_MCP_ALLOWED_ORIGINS: HTTP/SSE üzerinde kabul edilen virgülle ayrılmışOriginbaşlık değerleri- Varsayılan: Yok; bu,
Originbaşlığı taşıyan her isteği reddeder - MCP, HTTP/SSE taşıma bağlantıları için Origin doğrulaması gerektirir. Origin olmayan istekler kabul edilir çünkü tarayıcı olmayan MCP istemcileri normalde onu atlar. Eşleşmeyen bir Origin
403 Forbiddenalır./healthuç noktası yukarıda açıklandığı gibi muaftır. - Girdiler tamdır (
http://localhost:3000) veya herhangi bir bağlantı noktasını kabul eder (http://localhost:*). Ana bilgisayarlarda olduğu gibi, herhangi bir bağlantı noktası biçimi yalnızca bir bağlantı noktası taşıyan kaynaklarla eşleşir; standart bağlantı noktalı bir kaynak (https://app.example.com) tam olarak listelenmelidir.
- Varsayılan: Yok; bu,
Ters proxy Host işleme
Mümkün olduğunda Host koruyun. Bu, iletilen Host güvenini devre dışı tutar:
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 ve X-Forwarded-Proto değerlerini X-Forwarded-Host güveninden bağımsız olarak temizleyin. Uvicorn, CLICKHOUSE_MCP_TRUSTED_PROXIES ayarlanmamış olsa bile bu başlıklara proxy eşine dayanarak güvenebilir.
CLICKHOUSE_MCP_ALLOWED_HOSTS=mcp.example.com
Stok nginx, proxy'lenen istekler için Host değerini yukarı akış adına değiştirir. X-Forwarded-Host oluşturmaz veya üzerine yazmaz. Host korumak mümkün değilse, iletilen başlığı güvenilir uçta üzerine yazın:
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
İkinci yapılandırma yalnızca 10.20.0.8 proxy'nin anında kaynak adresi olduğunda, sunucu bağlantı noktası diğer istemcilerden izole edildiğinde ve nginx gelen iletme başlıklarını gösterildiği gibi üzerine yazdığında güvenlidir. Bir proxy zinciri için, her güvenilir atlama, yeni iletme başlıklarını oluşturmadan önce doğrulanmamış gelen değerleri atmalıdır.
IPv6 veya çift yığın bağlamasında, IPv4 proxy'leri ::ffff:10.20.0.8 gibi IPv4 eşlemeli adresler olarak görünebilir; bunlar otomatik olarak IPv4 girdileriyle eşleştirilir. Envoy'un append_x_forwarded_host değeri, mevcut bir X-Forwarded-Host değerine ekler ve üzerine yazmak yerine reddedilen virgülle ayrılmış bir liste üretir; bu nedenle güvenilir atlamayı başlığı üzerine yazacak şekilde yapılandırın. Kaynak NAT'lı Kubernetes'te (ör. externalTrafficPolicy: Cluster) gözlemlenen eş, proxy pod'u yerine bir düğüm IP'si olabilir; bu nedenle uygun şekilde pod veya düğüm CIDR'sine güvenin; ingress-nginx hem Host hem de X-Forwarded-Host değerlerini kendisi üzerine yazar.
Ara katman yazılımı değişkenleri
MCP_MIDDLEWARE_MODULE: MCP sunucusuna eklenecek özel ara katman yazılımını içeren Python modül adı- Varsayılan: Yok (ara katman yazılımı yüklenmez)
- Ara katman yazılımı modülünüzün modül adına ayarlayın (
.pyuzantısı olmadan) - Modül bir
setup_middleware(mcp)işlevi sağlamalıdır - Ayrıntılar ve örnekler için Özel Ara Katman Yazılımı bölümüne bakın
chDB Değişkenleri
CHDB_ENABLED: chDB işlevselliğini etkinleştir/devre dışı bırak- Varsayılan:
"false" - chDB araçlarını etkinleştirmek için
"true"olarak ayarlayın - İsteğe bağlı ek paketin kurulmasını gerektirir:
mcp-clickhouse[chdb]
- Varsayılan:
CHDB_DATA_PATH: chDB veri dizininin yolu- Varsayılan:
":memory:"(bellek içi veritabanı) - Bellek içi veritabanı için
:memory:kullanın - Kalıcı depolama için bir dosya yolu kullanın (ör.
/path/to/chdb/data)
- Varsayılan:
Yaygın yapılandırma tuzakları
CLICKHOUSE_SECUREile MCP / giriş TLS'si — MCP sunucusu Kubernetes girişinin, bir ters proxy'nin arkasında olduğu veya düz HTTP üzerinden erişildiği içinCLICKHOUSE_SECUREkapatmak veritabanı TLS'sini devre dışı bırakmaz; bu yalnızca bu sürecin ClickHouse'a nasıl bağlandığını değiştirir. Giriş TLS'sini veritabanı istemci ayarlarından ayrı olarak yapılandırın.- Yerel protokol bağlantı noktaları —
CLICKHOUSE_PORT, ClickHouse'un HTTP arayüzünü hedeflemelidir (varsayılan olarak8123/8443).9000/9440bağlantı noktaları yerel TCP protokolü içindir (clickhouse-client) ve bu sunucuyla çalışmaz. - Ana bilgisayar karışıklığı —
CLICKHOUSE_HOSTveritabanı ana bilgisayar adıdır.CLICKHOUSE_MCP_BIND_HOSTyalnızca MCP HTTP/SSE sunucusunun dinlediği adrestir.
Örnek Yapılandırmalar
Docker ile yerel geliştirme için:
# 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 için:
# 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 için:
CLICKHOUSE_HOST=sql-clickhouse.clickhouse.com
CLICKHOUSE_USER=demo
CLICKHOUSE_PASSWORD=
# Uses secure defaults (HTTPS on port 8443)
İstemci sertifikası kimlik doğrulaması olmayan özel bir sunucu CA'sı için:
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 istemci sertifikası kimlik doğrulaması için:
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.
ClickHouse Temel kimlik doğrulaması kullanırken katı bir TLS sunucusu tarafından istemci sertifikası gerektiğinde:
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 sonlandıran bir proxy istemci sertifikası gerektirdiğinde ve ClickHouse hâlâ Temel kimlik doğrulaması kullandığında CLICKHOUSE_TLS_MODE=proxy kullanın.
Yalnızca chDB için (bellek içi):
# chDB configuration
CHDB_ENABLED=true
CLICKHOUSE_ENABLED=false
# CHDB_DATA_PATH defaults to :memory:
Kalıcı depolamalı chDB için:
# chDB configuration
CHDB_ENABLED=true
CLICKHOUSE_ENABLED=false
CHDB_DATA_PATH=/path/to/chdb/data
MCP Inspector veya HTTP taşımasıyla uzaktan erişim için:
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 taşımasıyla yerel geliştirme için (kimlik doğrulama devre dışı):
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 taşıması kullanıldığında, sunucu yapılandırılan bağlantı noktasında (varsayılan 8000) çalışır. Örneğin, yukarıdaki yapılandırmayla:
- MCP uç noktası:
http://localhost:8000/mcp - Sağlık kontrolü:
http://localhost:8000/health
Bu değişkenleri ortamınızda, bir .env dosyasında veya Claude Desktop yapılandırmasında ayarlayabilirsiniz:
{
"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"
}
}
}
}
Not: Bağlama ana bilgisayarı ve bağlantı noktası ayarları yalnızca taşıma "http" veya "sse" olarak ayarlandığında kullanılır.
Testleri çalıştırma
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
