ClickHouse veritabanı entegrasyonu, şema incelemesi ve sorgu yetenekleri ile
Claude Desktop config.json'a ekle
{
"mcpServers": {
"clickhouse-mcp-clickhouse": {
"command": "python",
"args": [
"-m",
"mcp_clickhouse"
]
}
}
} Kaynak kodu al ve yerel olarak çalıştır
git clone https://github.com/ClickHouse/mcp-clickhouse.git ~/.mcp/mcp-clickhouse
cd ~/.mcp/mcp-clickhouse ClickHouse için bir MCP sunucusu.
run_query
query (string): Çalıştırılacak SQL sorgusu.CLICKHOUSE_ALLOW_WRITE_ACCESS=false), ancak gerekirse yazma izinleri açıkça etkinleştirilebilir.list_databases
list_tables
database (string).like / not_like (string): Tablo adlarına LIKE veya NOT LIKE filtreleri uygulayın.page_token (string): Sonraki sayfayı getirmek için önceki çağrı tarafından döndürülen token.page_size (int, varsayılan 50): Sayfa başına döndürülen tablo sayısı.include_detailed_columns (bool, varsayılan true): false olduğunda, daha hafif yanıtlar için sütun metaverilerini atlar ve tam create_table_query tutar.tables: Mevcut sayfa için tablo nesnelerinin dizisi.next_page_token: Sonraki sayfayı getirmek için bu değeri geri iletilir veya daha fazla tablo yoksa null.total_tables: Sağlanan filtreleri eşleştiren tabloların toplam sayısı.run_chdb_select_query
query (string): Çalıştırılacak SQL sorgusu.chdb extra'sını gerektirir: pip install 'mcp-clickhouse[chdb]'HTTP veya SSE transport ile çalıştırırken, /health adresinde bir health check endpoint mevcuttur. Bu endpoint:
200 OK döndürür (body: OK)503 Service Unavailable ve genel bir hata mesajı döndürürEndpoint, orchestrator probe'larının (örneğin Kubernetes liveness/readiness, load balancer'lar) kimlik bilgileri olmadan erişebilmesi için kasıtlı olarak kimlik doğrulamadan muaftır. Response body, backend sürüm dizelerini veya hata ayrıntılarını sızmamak için kasıtlı olarak minimum düzeyde tutulmuştur; hata ayıklamayı sunucu logları aracılığıyla yapın.
Örnek:
curl http://localhost:8000/health
# Response: OK
HTTP veya SSE transport kullanıldığında, kimlik doğrulama varsayılan olarak gereklidir. stdio transport (varsayılan) sadece standart input/output üzerinden iletişim kurduğundan kimlik doğrulama gerektirmez.
Üç kimlik doğrulama modu desteklenir. Birini seçin:
| Modu | Ne Zaman Kullanılır | Çevre Değişkeni |
|---|---|---|
| Statik bearer token | Basit dağıtımlar, dahili hizmetler | CLICKHOUSE_MCP_AUTH_TOKEN |
| OAuth / OIDC (via FastMCP) | Azure Entra, Google, GitHub, WorkOS, vb. | FASTMCP_SERVER_AUTH=<provider-class-path> (+ provider'a özel FASTMCP_SERVER_AUTH_* değişkenler) |
| Devre Dışı | Yalnızca lokal geliştirme | CLICKHOUSE_MCP_AUTH_DISABLED=true |
HTTP/SSE transport'ları için bunlardan hiçbiri yapılandırılmamışsa başlatma başarısız olur.
Güvenli bir token oluşturun (herhangi bir random string olabilir):
# uuidgen kullanarak (macOS/Linux)
uuidgen
# openssl kullanarak
openssl rand -hex 32
Sunucuyu token ile yapılandırın:
export CLICKHOUSE_MCP_AUTH_TOKEN="your-generated-token"
MCP client'ınızı token'ı isteklere dahil etmek için yapılandırın:
HTTP/SSE transport'ı ile Claude Desktop için:
{
"mcpServers": {
"mcp-clickhouse": {
"url": "http://127.0.0.1:8000",
"headers": {
"Authorization": "Bearer your-generated-token"
}
}
}
}
Not: /health endpoint'i kasıtlı olarak kimlik doğrulamadan muaftır (Health Check Endpoint yukarıya bakın). Bearer-token auth'ın aslında kimlik doğrulamadan geçmiş istekleri reddettiğini doğrulamak için, MCP endpoint'inin kendisine örneğin MCP Inspector ile veya /mcp'ye JSON-RPC isteği göndererek Authorization header'ı ile ve olmadan erişin ve kimlik doğrulamadan geçmiş çağrının 401 döndürdüğünü doğrulayın.
Üretim dağıtımları için kimlik sağlayıcılar (Azure Entra, Google, GitHub, WorkOS, vb.) ile, statik token kullanmak yerine kimlik doğrulamayı FastMCP'nin yerleşik auth provider'larına devredin. FASTMCP_SERVER_AUTH'ı bir FastMCP auth provider'ının tam sınıf yoluna ve provider'a özel FASTMCP_SERVER_AUTH_* değişkenlerine ayarlayın ve CLICKHOUSE_MCP_AUTH_TOKEN'ı ayarlanmamış 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>"
Tüm provider'lar ve bunların gerekli çevre değişkenlerinin listesi için FastMCP dokümantasyonuna bakın.
Yalnızca lokal geliştirme ve test için kimlik doğrulamayı devre dışı bırakabilirsiniz:
export CLICKHOUSE_MCP_AUTH_DISABLED=true
UYARI: Bunu yalnızca lokal geliştirme için kullanın. Sunucu herhangi bir ağa açık olduğunda kimlik doğrulamayı devre dışı bırakmayın.
Bu MCP sunucusu hem ClickHouse'u hem de chDB'yi destekler. İhtiyaçlarınıza bağlı olarak birini veya her ikisini de etkinleştirebilirsiniz.
Claude Desktop yapılandırma dosyasını açın:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%/Claude/claude_desktop_config.jsonAşağıdakileri ekleyin:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.10",
"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_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
Çevre değişkenlerini kendi ClickHouse hizmetinizi gösterecek şekilde güncelleyin.
Veya ClickHouse SQL Playground ile denemek istiyorsanız, aşağıdaki yapılandırmayı kullanabilirsiniz:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse",
"--python",
"3.10",
"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",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
chDB (gömülü ClickHouse engine) için aşağıdaki yapılandırmayı ekleyin:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse[chdb]",
"--python",
"3.10",
"mcp-clickhouse"
],
"env": {
"CHDB_ENABLED": "true",
"CLICKHOUSE_ENABLED": "false",
"CHDB_DATA_PATH": "/path/to/chdb/data"
}
}
}
}
ClickHouse ve chDB'yi aynı anda etkinleştirebilirsiniz:
{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": [
"run",
"--with",
"mcp-clickhouse[chdb]",
"--python",
"3.10",
"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",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30",
"CHDB_ENABLED": "true",
"CHDB_DATA_PATH": "/path/to/chdb/data"
}
}
}
}
uv komutu girdisini bulun ve bunu uv yürütülebilirinin mutlak yolu ile değiştirin. Bu, sunucu başlatılırken uv'nin doğru sürümünün kullanılmasını sağlar. Mac'te, which uv kullanarak bu yolu bulabilirsiniz.
Claude Desktop'ı yeniden başlatın ve değişiklikleri uygulayın.
Varsayılan olarak, bu MCP salt okunur sorguları zorunlu kılar, böylece keşif sırasında hatasız mutasyonlar gerçekleşemez. DDL veya INSERT/UPDATE ifadelerine izin vermek için CLICKHOUSE_ALLOW_WRITE_ACCESS çevre değişkenini true olarak ayarlayın. ClickHouse örneğinin kendisi yazmaları engellerse sunucu salt okunur modu zorunlu tutmaya devam eder.
Yazma erişimi etkinleştirilmiş olsa bile (CLICKHOUSE_ALLOW_WRITE_ACCESS=true), yıkıcı işlemler (DROP TABLE, DROP DATABASE, DROP VIEW, DROP DICTIONARY, TRUNCATE TABLE) güvenlik için ek bir opt-in flag'i gerektirir. Bu, AI keşfi sırasında hatasız veri silmeyi engeller.
Yıkıcı işlemleri etkinleştirmek için her iki flag'ı de ayarlayın:
"env": {
"CLICKHOUSE_ALLOW_WRITE_ACCESS": "true",
"CLICKHOUSE_ALLOW_DROP": "true"
}
Bu iki katmanlı yaklaşım, hatasız drop'ların çok zor olmasını sağlar:
CLICKHOUSE_ALLOW_WRITE_ACCESS=true gerektirirCLICKHOUSE_ALLOW_DROP=true gerektirirSistem Python yüklemesini uv yerine kullanmayı tercih ederseniz, paketi PyPI'den yükleyebilir ve doğrudan çalıştırabilirsiniz:
Paketi pip kullanarak yükleyin:
python3 -m pip install mcp-clickhouse
chDB desteğini de yüklemek 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ırmasını Python'u doğrudan kullanmak için 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",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
Alternatif olarak, kurulu script'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",
"CLICKHOUSE_SEND_RECEIVE_TIMEOUT": "30"
}
}
}
}
Not: Python yürütülebiliri veya mcp-clickhouse script'i sistem PATH'inizde değilse tam yolunu kullanın. Yolları şu şekilde bulabilirsiniz:
which python3which mcp-clickhouseKaynak kodu değiştirmeden MCP sunucusuna özel middleware ekleyebilirsiniz. FastMCP, MCP protokol mesajlarını (tool çağrıları, resource okumaları, prompt'lar, vb.) engelleme ve işleme yapmanıza izin veren bir middleware sistemi sağlar.
Middleware genişleten ve bir setup_middleware(mcp) fonksiyonu içeren middleware sınıflarıyla 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):
"""Tüm tool çağrılarını kaydedin."""
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):
"""MCP sunucusuna middleware kaydedin."""
mcp.add_middleware(LoggingMiddleware())
MCP_MIDDLEWARE_MODULE çevre değişkenini modül adına (.py uzantısı olmadan) ayarlayın:{
"mcpServers": {
"mcp-clickhouse": {
"command": "uv",
"args": ["run", "--with", "mcp-clickhouse", "--python", "3.10", "mcp-clickhouse"],
"env": {
"CLICKHOUSE_HOST": "<clickhouse-host>",
"CLICKHOUSE_USER": "<clickhouse-user>",
"CLICKHOUSE_PASSWORD": "<clickhouse-password>",
"MCP_MIDDLEWARE_MODULE": "my_middleware"
}
}
}
}
example_middleware.py adında örnek bir middleware modülü sağlanmıştır ve yaygın kalıpları gösterir:
Örneği kullanmak için:
"env": {
"MCP_MIDDLEWARE_MODULE": "example_middleware"
}
Middleware taban sınıfı, farklı MCP işlemleri için hook'lar 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 tool çalıştırıldığında çağrılıron_read_resource(context, call_next) - Bir resource okunduğunda çağrılıron_get_prompt(context, call_next) - Bir prompt alındığında çağrılıron_list_tools(context, call_next) - Tool'lar listelendiğinde çağrılıron_list_resources(context, call_next) - Resource'lar listelendiğinde çağrılıron_list_resource_templates(context, call_next) - Resource şablonları listelendiğinde çağrılıron_list_prompts(context, call_next) - Prompt'lar listelendiğinde çağrılırHer hook, mesajı ve metadata'yı içeren bir MiddlewareContext nesnesi alır ve pipeline'ı devam ettirmek için bir call_next fonksiyonu alır.
Middleware, CLIENT_CONFIG_OVERRIDES_KEY context durumu anahtarını kullanarak istek başına ClickHouse client yapılandırmasını geçersiz kılabilir. Sunucu bu overrides'ları çevre değişkenlerinden alınan taban yapılandırma ile birleştirir.
from fastmcp.server.dependencies import get_context
from mcp_clickhouse.mcp_server import CLIENT_CONFIG_OVERRIDES_KEY
ctx = get_context()
ctx.set_state(CLIENT_CONFIG_OVERRIDES_KEY, {
"connect_timeout": 60,
"send_receive_timeout": 120
})
Bu, dinamik timeout ayarlamaları, kiracı'ya özel yönlendirme veya kullanıcı başına bağlantı ayarları gibi gelişmiş use case'leri etkinleştirir.
test-services dizininde docker compose up -d çalıştırarak ClickHouse kümesini başlatın.
Depo kökünün .env dosyasına aşağıdaki değişkenleri ekleyin.
Not: Bu bağlamda default kullanıcısının kullanımı yalnızca lokal geliştirme amaçlarıyla yapılmaktadır.
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
Bağımlılıkları yüklemek için uv sync çalıştırın. uv'yi yüklemek için buradaki talimatları izleyin. Sonra source .venv/bin/activate yapın.
MCP Inspector ile kolay test etmek için fastmcp dev mcp_clickhouse/mcp_server.py çalıştırarak MCP sunucusunu başlatın.
HTTP transport ve health check endpoint'i ile test etmek için:
# Geliştirme için kimlik doğrulamayı devre dışı bırakın
CLICKHOUSE_MCP_SERVER_TRANSPORT=http CLICKHOUSE_MCP_AUTH_DISABLED=true python -m mcp_clickhouse.main
# Veya kimlik doğrulama ile (önce bir token oluşturun)
CLICKHOUSE_MCP_SERVER_TRANSPORT=http CLICKHOUSE_MCP_AUTH_TOKEN="your-token" python -m mcp_clickhouse.main
# Sonra başka bir terminalde:
curl http://localhost:8000/health
ClickHouse ve chDB bağlantılarını yapılandırmak için aşağıdaki çevre değişkenleri kullanılır:
CLICKHOUSE_HOST: ClickHouse sunucunuzun hostname'iCLICKHOUSE_USER: Kimlik doğrulama için kullanıcı adıCLICKHOUSE_PASSWORD: Kimlik doğrulama için parola[!CAUTION] MCP veritabanı kullanıcısını, veritabanınıza bağlanan herhangi bir dış client gibi ele almak ve yalnızca işleyişi için gerekli minimum yetkiler vermek önemlidir. Varsayılan veya yönetim kullanıcılarının kullanılması her zaman kesinlikle kaçınılmalıdır.
CLICKHOUSE_PORT: ClickHouse sunucunuzun port numarası
8443, devre dışı bırakılırsa 8123CLICKHOUSE_ROLE: Kimlik doğrulama için kullanılacak role
CLICKHOUSE_SECURE: HTTPS bağlantısını etkinleştir/devre dışı bırak
"true""false" olarak ayarlayınCLICKHOUSE_VERIFY: SSL sertifikası doğrulamayı etkinleştir/devre dışı bırak
"true""false" ayarlayın (üretim için önerilmez)truststore üzerinden işletim sistemi güven deposunu kullanır. Uygun sertifika işlenmesini sağlamak için başlangıçta truststore.inject_into_ssl() öğesini çağırız. Beklenmeyen bir hata oluşursa Python'un varsayılan SSL davranışı yalnızca fallback olarak kullanılır.CLICKHOUSE_SERVER_HOST_NAME: SNI geçersiz kılması ve sertifika doğrulaması için sunucu hostname'i
CLICKHOUSE_CONNECT_TIMEOUT: Bağlantı timeout'u saniye cinsinden
"30"CLICKHOUSE_SEND_RECEIVE_TIMEOUT: Gönderme/alma timeout'u saniye cinsinden
"300"CLICKHOUSE_DATABASE: Kullanılacak varsayılan veritabanı
CLICKHOUSE_MCP_SERVER_TRANSPORT: MCP sunucusu için transport metodunu ayarlar.
"stdio""stdio", "http", "sse". Bu, MCP Inspector gibi araçlarla lokal geliştirme için kullanışlıdır.CLICKHOUSE_MCP_BIND_HOST: HTTP veya SSE transport kullanırken MCP sunucusunun bind'ı yapılacak host
"127.0.0.1""0.0.0.0" olarak ayarlayın (Docker veya uzak erişim için kullanışlı)"http" veya "sse" olduğundaVeritabanları için kolay, hızlı ve güvenli araçlar sağlayan açık kaynak MCP sunucusu.
Baserow veritabanı entegrasyonu ile tablo arama, listeleme ve satır oluşturma, okuma, güncelleme ve silme işlemlerini gerçekleştirebilirsiniz.
Postgres geliştirme ve operasyonları için kapsamlı MCP sunucusu; performans analizi, ayarlama ve sağlık kontrolleri için araçlar içerir.
Supabase'in resmi MCP sunucusu, AI asistanlarını doğrudan Supabase projenize bağlayarak tablo yönetimi, config getirme ve veri sorgulama gibi işlemleri gerçekleştirmelerine olanak tanır.
NodeJS'de MySQL veritabanı entegrasyonu, yapılandırılabilir erişim kontrolleri ve schema incelemesi özellikleri ile sağlanır.
A Qdrant MCP server