ClickHouse
oficialConsulta tu servidor de base de datos ClickHouse.
¿Qué puedes hacer con Click House MCP?
- Ejecutar consultas SQL de solo lectura — Pídele al asistente que ejecute cualquier consulta
SELECTen tu clúster de ClickHouse usandorun_query. - Listar bases de datos y tablas — Explora tu esquema listando todas las bases de datos con
list_databaseso paginando a través de las tablas en una base de datos específica conlist_tables. - Consultar archivos y URLs directamente a través de chDB — Usa
run_chdb_select_querypara ejecutar SQL contra archivos locales o fuentes de datos remotas sin cargarlos primero en ClickHouse. - Controlar operaciones de escritura y destructivas — Habilita
CLICKHOUSE_ALLOW_WRITE_ACCESSpara DDL/DML, y opcionalmenteCLICKHOUSE_ALLOW_DROPpara permitir sentenciasDROPoTRUNCATEdurante sesiones asistidas por IA.
Documentación
Servidor MCP de ClickHouse
Un servidor MCP para ClickHouse.
Características
Herramientas de ClickHouse
-
run_query- Ejecuta consultas SQL en tu clúster de ClickHouse.
- Entrada:
query(string): La consulta SQL a ejecutar. - Las consultas se ejecutan en modo de solo lectura por defecto (
CLICKHOUSE_ALLOW_WRITE_ACCESS=false), pero las escrituras pueden habilitarse explícitamente si es necesario.
-
list_databases- Lista todas las bases de datos en tu clúster de ClickHouse.
-
list_tables- Lista las tablas en una base de datos con paginación.
- Entrada requerida:
database(string). - Entradas opcionales:
like/not_like(string): Aplica filtrosLIKEoNOT LIKEa los nombres de las tablas.page_token(string): Token devuelto por una llamada previa para obtener la siguiente página.page_size(int, por defecto50): Número de tablas devueltas por página.include_detailed_columns(bool, por defectotrue): Cuando esfalse, omite los metadatos de las columnas para respuestas más ligeras, manteniendo elcreate_table_querycompleto.
- Forma de la respuesta:
tables: Array de objetos de tabla para la página actual.next_page_token: Pasa este valor de vuelta para obtener la siguiente página, onullcuando no hay más tablas.total_tables: Recuento total de tablas que coinciden con los filtros aplicados.
Herramientas de chDB
run_chdb_select_query- Ejecuta consultas SQL usando el motor embebido de ClickHouse de chDB.
- Entrada:
query(string): La consulta SQL a ejecutar. - Consulta datos directamente desde varias fuentes (archivos, URLs, bases de datos) sin procesos ETL.
- Requiere el extra opcional
chdb:pip install 'mcp-clickhouse[chdb]'
Endpoint de Verificación de Salud
Cuando se ejecuta con transporte HTTP o SSE, un endpoint de verificación de salud está disponible en /health. Este endpoint:
- Devuelve
200 OK(cuerpo:OK) si el servidor está saludable y puede conectarse a ClickHouse - Devuelve
503 Service Unavailablecon un mensaje de error genérico si el servidor no puede conectarse a ClickHouse
El endpoint está intencionalmente sin autenticación para que las sondas del orquestador (ej. liveness/readiness de Kubernetes, balanceadores de carga) puedan alcanzarlo sin credenciales. El cuerpo de la respuesta es deliberadamente mínimo para evitar filtrar cadenas de versión del backend o detalles del error; depura los fallos a través de los logs del servidor.
Ejemplo:
curl http://localhost:8000/health
# Response: OK
Seguridad
Autenticación para Transportes HTTP/SSE
Al usar transporte HTTP o SSE, la autenticación es requerida por defecto. El transporte stdio (por defecto) no requiere autenticación ya que solo se comunica a través de entrada/salida estándar.
Se soportan tres modos de autenticación. Elige uno:
| Modo | Cuándo usarlo | Variable de entorno |
|---|---|---|
| Token de portador estático | Despliegues simples, servicios internos | CLICKHOUSE_MCP_AUTH_TOKEN |
| OAuth / OIDC (vía FastMCP) | Azure Entra, Google, GitHub, WorkOS, etc. | FASTMCP_SERVER_AUTH=<provider-class-path> (+ variables FASTMCP_SERVER_AUTH_* específicas del proveedor) |
| Deshabilitado | Solo desarrollo local | CLICKHOUSE_MCP_AUTH_DISABLED=true |
El inicio falla si ninguna de estas opciones está configurada para los transportes HTTP/SSE.
Configurando la Autenticación
-
Genera un token seguro (puede ser cualquier cadena aleatoria):
# Using uuidgen (macOS/Linux) uuidgen # Using openssl openssl rand -hex 32 -
Configura el servidor con el token:
export CLICKHOUSE_MCP_AUTH_TOKEN="your-generated-token" -
Configura tu cliente MCP para incluir el token en las peticiones:
Para Claude Desktop con transporte HTTP/SSE:
{ "mcpServers": { "mcp-clickhouse": { "url": "http://127.0.0.1:8000", "headers": { "Authorization": "Bearer your-generated-token" } } } }Nota: el endpoint
/healthestá intencionalmente sin autenticación (ver Endpoint de Verificación de Salud arriba). Para verificar que la autenticación por token de portador está realmente rechazando peticiones no autenticadas, accede al endpoint MCP mismo, ej. con el Inspector MCP, o haciendo POST de una petición JSON-RPC a/mcpcon y sin la cabeceraAuthorizationy confirmando que la llamada no autenticada devuelve401.
OAuth / OIDC vía FastMCP
Para despliegues en producción con proveedores de identidad (Azure Entra, Google, GitHub, WorkOS, etc.), delega la autenticación a los proveedores de autenticación integrados de FastMCP en lugar de usar un token estático. Establece FASTMCP_SERVER_AUTH a la ruta completa de la clase de un proveedor de autenticación de FastMCP, junto con las variables FASTMCP_SERVER_AUTH_* específicas del proveedor, y deja CLICKHOUSE_MCP_AUTH_TOKEN sin establecer.
Ejemplo (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>"
Consulta la documentación de FastMCP para la lista completa de proveedores y sus variables de entorno requeridas.
Modo de Desarrollo (Deshabilitando la Autenticación)
Solo para desarrollo y pruebas locales, puedes deshabilitar la autenticación estableciendo:
export CLICKHOUSE_MCP_AUTH_DISABLED=true
ADVERTENCIA: Usa esto solo para desarrollo local. No deshabilites la autenticación cuando el servidor esté expuesto a cualquier red.
Configuración
Este servidor MCP soporta tanto ClickHouse como chDB. Puedes habilitar uno o ambos según tus necesidades.
-
Abre el archivo de configuración de Claude Desktop ubicado en:
- En macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - En Windows:
%APPDATA%/Claude/claude_desktop_config.json
- En macOS:
-
Añade lo siguiente:
{
"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"
}
}
}
}
Actualiza las variables de entorno para que apunten a tu propio servicio de ClickHouse.
O, si quieres probarlo con el ClickHouse SQL Playground, puedes usar la siguiente configuración:
{
"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"
}
}
}
}
Para chDB (motor embebido de ClickHouse), añade la siguiente configuración:
{
"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"
}
}
}
}
También puedes habilitar tanto ClickHouse como chDB simultáneamente:
{
"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"
}
}
}
}
-
Localiza la entrada de comando para
uvy reemplázala con la ruta absoluta al ejecutableuv. Esto asegura que se use la versión correcta deuval iniciar el servidor. En una mac, puedes encontrar esta ruta usandowhich uv. -
Reinicia Claude Desktop para aplicar los cambios.
Acceso de Escritura Opcional
Por defecto, este MCP fuerza consultas de solo lectura para que no puedan ocurrir mutaciones accidentales durante la exploración. Para permitir sentencias DDL o INSERT/UPDATE, establece la variable de entorno CLICKHOUSE_ALLOW_WRITE_ACCESS a true. El servidor sigue forzando el modo de solo lectura si la propia instancia de ClickHouse no permite escrituras.
Protección de Operaciones Destructivas
Incluso cuando el acceso de escritura está habilitado (CLICKHOUSE_ALLOW_WRITE_ACCESS=true), las operaciones destructivas (DROP TABLE, DROP DATABASE, DROP VIEW, DROP DICTIONARY, TRUNCATE TABLE) requieren una bandera de aceptación adicional por seguridad. Esto previene la eliminación accidental de datos durante la exploración con IA.
Para habilitar operaciones destructivas, establece ambas banderas:
"env": {
"CLICKHOUSE_ALLOW_WRITE_ACCESS": "true",
"CLICKHOUSE_ALLOW_DROP": "true"
}
Este enfoque de dos niveles asegura que las eliminaciones accidentales sean muy difíciles:
- Operaciones de escritura (INSERT, UPDATE, CREATE) requieren
CLICKHOUSE_ALLOW_WRITE_ACCESS=true - Operaciones destructivas (DROP, TRUNCATE) requieren adicionalmente
CLICKHOUSE_ALLOW_DROP=true
Ejecución Sin uv (Usando Python del Sistema)
Si prefieres usar la instalación de Python del sistema en lugar de uv, puedes instalar el paquete desde PyPI y ejecutarlo directamente:
-
Instala el paquete usando pip:
python3 -m pip install mcp-clickhousePara instalar también el soporte de chDB:
python3 -m pip install 'mcp-clickhouse[chdb]'Para actualizar a la última versión:
python3 -m pip install --upgrade mcp-clickhouse -
Actualiza tu configuración de Claude Desktop para usar Python directamente:
{
"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"
}
}
}
}
Alternativamente, puedes usar el script instalado directamente:
{
"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"
}
}
}
}
Nota: Asegúrate de usar la ruta completa al ejecutable de Python o al script mcp-clickhouse si no están en tu PATH del sistema. Puedes encontrar las rutas usando:
which python3para el ejecutable de Pythonwhich mcp-clickhousepara el script instalado
Middleware Personalizado
Puedes añadir middleware personalizado al servidor MCP sin modificar el código fuente. FastMCP proporciona un sistema de middleware que te permite interceptar y procesar mensajes del protocolo MCP (llamadas a herramientas, lecturas de recursos, prompts, etc.).
Cómo Usarlo
- Crea un módulo de Python con clases de middleware que extiendan
Middlewarey una funciónsetup_middleware(mcp):
# 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())
- Establece la variable de entorno
MCP_MIDDLEWARE_MODULEal nombre del módulo (sin la extensión.py):
{
"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"
}
}
}
}
- Asegúrate de que tu módulo de middleware esté en la ruta de importación de Python (ej., en el mismo directorio donde se ejecuta el servidor MCP, o instalado como un paquete).
Middleware de Ejemplo
Se proporciona un módulo de middleware de ejemplo en example_middleware.py que muestra patrones comunes:
- Registrar todas las peticiones MCP
- Registrar llamadas a herramientas específicamente
- Medir el tiempo de procesamiento de peticiones
Para usar el ejemplo:
"env": {
"MCP_MIDDLEWARE_MODULE": "example_middleware"
}
Capacidades del Middleware
La clase base Middleware proporciona ganchos para diferentes operaciones MCP:
on_message(context, call_next)- Llamado para todos los mensajeson_request(context, call_next)- Llamado para todas las peticioneson_notification(context, call_next)- Llamado para todas las notificacioneson_call_tool(context, call_next)- Llamado cuando se ejecuta una herramientaon_read_resource(context, call_next)- Llamado cuando se lee un recursoon_get_prompt(context, call_next)- Llamado cuando se recupera un prompton_list_tools(context, call_next)- Llamado al listar herramientason_list_resources(context, call_next)- Llamado al listar recursoson_list_resource_templates(context, call_next)- Llamado al listar plantillas de recursoson_list_prompts(context, call_next)- Llamado al listar prompts
Cada gancho recibe un objeto MiddlewareContext que contiene el mensaje y los metadatos, y una función call_next para continuar el pipeline.
Configuración Dinámica del Cliente vía Estado de Contexto
El middleware puede sobrescribir la configuración del cliente de ClickHouse por petición usando la clave de estado de contexto CLIENT_CONFIG_OVERRIDES_KEY. El servidor fusiona estas sobrescrituras con la configuración base de las variables de entorno.
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
})
Esto habilita casos de uso avanzados como ajustes dinámicos de tiempo de espera, enrutamiento específico de inquilino, o configuraciones de conexión por usuario.
Desarrollo
-
En el directorio
test-servicesejecutadocker compose up -dpara iniciar el clúster de ClickHouse. -
Añade las siguientes variables a un archivo
.enven la raíz del repositorio.
Nota: El uso del usuario default en este contexto está destinado únicamente para fines de desarrollo local.
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
-
Ejecuta
uv syncpara instalar las dependencias. Para instalaruvsigue las instrucciones aquí. Luego hazsource .venv/bin/activate. -
Para pruebas fáciles con el Inspector MCP, ejecuta
fastmcp dev mcp_clickhouse/mcp_server.pypara iniciar el servidor MCP. -
Para probar con transporte HTTP y el endpoint de verificación de salud:
# For development, disable authentication CLICKHOUSE_MCP_SERVER_TRANSPORT=http CLICKHOUSE_MCP_AUTH_DISABLED=true 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
Variables de Entorno
La configuración se divide en grupos independientes. Mezclarlos es una causa común de fallos de conexión difíciles de depurar:
| Grupo | Variables | Controla |
|---|---|---|
| Conexión a la base de datos ClickHouse | CLICKHOUSE_HOST, CLICKHOUSE_PORT, CLICKHOUSE_SECURE, CLICKHOUSE_VERIFY, … | Cómo este servidor MCP se conecta a tu clúster de ClickHouse a través de la interfaz HTTP |
| Servidor MCP / transporte | CLICKHOUSE_MCP_*, FASTMCP_SERVER_AUTH, FASTMCP_SERVER_AUTH_* | Transporte MCP, autenticación y límites de ejecución de la herramienta de consulta |
| Middleware / chDB | MCP_MIDDLEWARE_MODULE, CHDB_* | Extensiones opcionales |
[!IMPORTANTE] Variables como
CLICKHOUSE_SECURE,CLICKHOUSE_VERIFYyCLICKHOUSE_PORTaplican solo a la conexión de la base de datos ClickHouse. No configuran TLS, puertos o autenticación para el endpoint del protocolo MCP.Ejemplo: si el servidor MCP se ejecuta en Kubernetes detrás de un ingress que termina TLS, eso es una preocupación del transporte MCP. Mantén
CLICKHOUSE_SECUREalineado con cómo el pod alcanza a ClickHouse mismo (HTTPS →true, HTTP plano →false). EstablecerCLICKHOUSE_SECURE=falseporque el servidor MCP está detrás de un ingress hará que el servidor marque a ClickHouse sobre HTTP—a menudo contra un puerto solo HTTPS—y produzca errores opacos HTTP/TLS en los logs del servidor.
Conexión a la base de datos ClickHouse
Estas variables configuran el cliente HTTP clickhouse-connect y el comportamiento de las herramientas respaldadas por ClickHouse como run_query, list_databases y list_tables.
Variables obligatorias
CLICKHOUSE_HOST: El nombre de host de tu servidor ClickHouse (extremo de la base de datos, no la dirección de enlace del servidor MCP)CLICKHOUSE_USER: El nombre de usuario para la autenticación de ClickHouseCLICKHOUSE_PASSWORD: La contraseña para la autenticación de ClickHouse
[!CAUTION] Es importante tratar a tu usuario de base de datos MCP como lo harías con cualquier cliente externo que se conecte a tu base de datos, otorgando solo los privilegios mínimos necesarios para su funcionamiento. Se debe evitar estrictamente el uso de usuarios predeterminados o administrativos en todo momento.
Variables opcionales
CLICKHOUSE_PORT: Puerto de la interfaz HTTP de tu servidor ClickHouse- Predeterminado:
8443siCLICKHOUSE_SECURE=true,8123siCLICKHOUSE_SECURE=false - Normalmente no es necesario configurarlo a menos que se use un puerto no estándar
- Debe ser un puerto de interfaz HTTP, no el puerto del protocolo TCP nativo usado por
clickhouse-client - Valores comunes:
- HTTP:
8123(plano) /8443(TLS) — usado por este servidor y ClickHouse Cloud HTTPS - TCP nativo (no compatible aquí):
9000(plano) /9440(TLS) — usado porclickhouse-client
- HTTP:
- Si el servidor responde con
Port 9000 is for clickhouse-client program, estás apuntando al protocolo nativo; cambia al puerto HTTP (8123/8443o la asignación HTTP de tu despliegue)
- Predeterminado:
CLICKHOUSE_ROLE: El rol de ClickHouse a usar para la autenticación- Predeterminado: Ninguno
- Configúralo si tu usuario requiere un rol específico
CLICKHOUSE_SECURE: Habilitar HTTPS para la conexión a la base de datos ClickHouse (no para clientes MCP)- Predeterminado:
"true" - Configúralo como
"false"solo cuando el servidor MCP llegue a ClickHouse a través de HTTP plano (típico para Docker Compose local en el puerto8123) - Deja
"true"para ClickHouse Cloud y cualquier extremo de base de datos HTTPS, incluso si el propio servidor MCP se expone a través de HTTP, stdio o un ingreso que termina TLS por separado - No hacer coincidir esta bandera con el puerto de la base de datos (por ejemplo,
CLICKHOUSE_SECURE=falsecontra el puerto8443) es un error de configuración frecuente y generalmente se manifiesta como errores confusos del cliente HTTP en lugar de un mensaje claro de "esquema incorrecto"
- Predeterminado:
CLICKHOUSE_VERIFY: Habilitar/deshabilitar la verificación del certificado SSL para la conexión HTTPS de ClickHouse- Predeterminado:
"true" - Configúralo como
"false"para deshabilitar la verificación del certificado (no recomendado para producción) - Certificados TLS: El paquete usa el almacén de confianza de tu sistema operativo para la verificación del certificado TLS a través de
truststore. Llamamos atruststore.inject_into_ssl()al inicio para asegurar un manejo adecuado del certificado. El comportamiento SSL predeterminado de Python se usa como respaldo solo si ocurre un error inesperado.
- Predeterminado:
CLICKHOUSE_SERVER_HOST_NAME: Nombre de host del servidor para anulación de SNI y validación de certificado en la conexión de ClickHouse- Predeterminado: Ninguno (usa el nombre de host de la conexión)
- Esto es útil al conectarse a través de proxies o balanceadores de carga donde el nombre de host del certificado difiere del nombre de host de la conexión. Cuando se configura, este nombre de host se usará tanto para SNI (Indicación del Nombre del Servidor) durante el handshake TLS como para la validación del nombre de host del certificado.
CLICKHOUSE_PROXY_PATH: Prefijo de ruta URL para el extremo HTTP de ClickHouse- Predeterminado: Ninguno
- Configúralo cuando la interfaz HTTP de ClickHouse esté expuesta detrás de un proxy inverso bajo un prefijo de ruta (por ejemplo,
/clickhouse)
CLICKHOUSE_CONNECT_TIMEOUT: Tiempo de espera de conexión en segundos para el cliente de ClickHouse- Predeterminado:
"30" - Aumenta este valor si experimentas tiempos de espera de conexión
- Predeterminado:
CLICKHOUSE_SEND_RECEIVE_TIMEOUT: Tiempo de espera de envío/recepción en segundos para el cliente de ClickHouse- Predeterminado:
"300" - Aumenta este valor para consultas de larga duración
- Predeterminado:
CLICKHOUSE_DATABASE: Base de datos ClickHouse predeterminada a usar- Predeterminado: Ninguno (usa el predeterminado del servidor)
- Configúralo para conectarse automáticamente a una base de datos específica
CLICKHOUSE_ENABLED: Habilitar/deshabilitar las herramientas de base de datos ClickHouse- Predeterminado:
"true" - Configúralo como
"false"para deshabilitar las herramientas de ClickHouse cuando se usa solo chDB
- Predeterminado:
CLICKHOUSE_ALLOW_WRITE_ACCESS: Permitir operaciones de escritura (DDL y DML) contra ClickHouse- Predeterminado:
"false" - Configúralo como
"true"para permitir operaciones DDL (CREATE, ALTER, DROP) y DML (INSERT, UPDATE, DELETE) - Cuando está deshabilitado (predeterminado), las consultas se ejecutan con la configuración
readonly=1para prevenir modificaciones de datos
- Predeterminado:
CLICKHOUSE_ALLOW_DROP: Permitir operaciones destructivas (DROP TABLE, DROP DATABASE, DROP VIEW, DROP DICTIONARY, TRUNCATE TABLE)- Predeterminado:
"false" - Solo tiene efecto cuando
CLICKHOUSE_ALLOW_WRITE_ACCESS=truetambién está configurado - Configúralo como
"true"para permitir explícitamente operaciones destructivas DROP y TRUNCATE - Esta es una característica de seguridad para prevenir la eliminación accidental de datos durante la exploración de IA
- Predeterminado:
Servidor MCP y transporte
Estas variables controlan el proceso MCP en sí, incluyendo transporte, autenticación y límites de ejecución de herramientas de consulta. Son independientes de la configuración de la base de datos ClickHouse anterior. Consulta también Autenticación para transportes HTTP/SSE.
CLICKHOUSE_MCP_SERVER_TRANSPORT: Establece el método de transporte para el servidor MCP- Predeterminado:
"stdio" - Opciones válidas:
"stdio","http","sse". Esto es útil para el desarrollo local con herramientas como MCP Inspector. stdioes típico para Claude Desktop;http/sseexponen un oyente de red (host/puerto de enlace abajo)
- Predeterminado:
CLICKHOUSE_MCP_BIND_HOST: Host al que enlazar el servidor MCP cuando se usa transporte HTTP o SSE- Predeterminado:
"127.0.0.1" - Configúralo como
"0.0.0.0"para enlazar a todas las interfaces de red (útil para Docker o acceso remoto) - Solo se usa cuando el transporte es
"http"o"sse"— no relacionado conCLICKHOUSE_HOST
- Predeterminado:
CLICKHOUSE_MCP_BIND_PORT: Puerto al que enlazar el servidor MCP cuando se usa transporte HTTP o SSE- Predeterminado:
"8000" - Solo se usa cuando el transporte es
"http"o"sse"— no relacionado conCLICKHOUSE_PORT
- Predeterminado:
CLICKHOUSE_MCP_QUERY_TIMEOUT: Tiempo de espera en segundos para las herramientas de consulta- Predeterminado:
"30" - Auméntalo si ves errores
Query timed out after ...para consultas pesadas
- Predeterminado:
CLICKHOUSE_MCP_AUTH_TOKEN: Token de portador estático para transportes HTTP/SSE- Predeterminado: Ninguno
- Uno de
CLICKHOUSE_MCP_AUTH_TOKEN,FASTMCP_SERVER_AUTHoCLICKHOUSE_MCP_AUTH_DISABLED=truees obligatorio para transportes HTTP/SSE - Genera usando
uuidgenoopenssl rand -hex 32 - Los clientes deben enviar este token en el encabezado
Authorization: Bearer <token>
FASTMCP_SERVER_AUTH: Delegar la autenticación a un proveedor de autenticación FastMCP- Predeterminado: Ninguno
- El valor es la ruta de clase completa de una subclase AuthProvider, por ejemplo,
fastmcp.server.auth.providers.azure.AzureProviderofastmcp.server.auth.providers.google.GoogleProvider - Cuando se configura, FastMCP carga automáticamente el proveedor desde sus propias variables de entorno
FASTMCP_SERVER_AUTH_*; dejaCLICKHOUSE_MCP_AUTH_TOKENsin configurar en este modo
CLICKHOUSE_MCP_AUTH_DISABLED: Deshabilitar la autenticación para transportes HTTP/SSE- Predeterminado:
"false"(la autenticación está habilitada) - Configúralo como
"true"para deshabilitar la autenticación solo para desarrollo/pruebas locales - ADVERTENCIA: Úsalo solo para desarrollo local. No lo deshabilites cuando esté expuesto a redes
- Predeterminado:
Variables de Middleware
MCP_MIDDLEWARE_MODULE: Nombre del módulo Python que contiene middleware personalizado para inyectar en el servidor MCP- Predeterminado: Ninguno (no se carga middleware)
- Configúralo con el nombre del módulo (sin la extensión
.py) de tu módulo de middleware - El módulo debe proporcionar una función
setup_middleware(mcp) - Consulta Middleware Personalizado para detalles y ejemplos
Variables de chDB
CHDB_ENABLED: Habilitar/deshabilitar la funcionalidad de chDB- Predeterminado:
"false" - Configúralo como
"true"para habilitar las herramientas de chDB - Requiere instalar el extra opcional:
mcp-clickhouse[chdb]
- Predeterminado:
CHDB_DATA_PATH: La ruta al directorio de datos de chDB- Predeterminado:
":memory:"(base de datos en memoria) - Usa
:memory:para base de datos en memoria - Usa una ruta de archivo para almacenamiento persistente (por ejemplo,
/path/to/chdb/data)
- Predeterminado:
Errores comunes de configuración
CLICKHOUSE_SECUREvs MCP / TLS de ingreso — DesactivarCLICKHOUSE_SECUREporque el servidor MCP se encuentra detrás de un ingreso de Kubernetes, un proxy inverso, o se accede a través de HTTP plano no deshabilita el TLS de la base de datos; solo cambia cómo este proceso se conecta a ClickHouse. Configura el TLS de ingreso por separado de la configuración del cliente de base de datos.- Puertos de protocolo nativo —
CLICKHOUSE_PORTdebe apuntar a la interfaz HTTP de ClickHouse (8123/8443por defecto). Los puertos9000/9440son para el protocolo TCP nativo (clickhouse-client) y no funcionarán con este servidor. - Confusión de host —
CLICKHOUSE_HOSTes el nombre de host de la base de datos.CLICKHOUSE_MCP_BIND_HOSTes solo la dirección en la que escucha el servidor HTTP/SSE MCP.
Configuraciones de ejemplo
Para desarrollo local con 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
Para 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
Para ClickHouse SQL Playground:
CLICKHOUSE_HOST=sql-clickhouse.clickhouse.com
CLICKHOUSE_USER=demo
CLICKHOUSE_PASSWORD=
# Uses secure defaults (HTTPS on port 8443)
Solo para chDB (en memoria):
# chDB configuration
CHDB_ENABLED=true
CLICKHOUSE_ENABLED=false
# CHDB_DATA_PATH defaults to :memory:
Para chDB con almacenamiento persistente:
# chDB configuration
CHDB_ENABLED=true
CLICKHOUSE_ENABLED=false
CHDB_DATA_PATH=/path/to/chdb/data
Para MCP Inspector o acceso remoto con transporte 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)
Para desarrollo local con transporte HTTP (autenticación deshabilitada):
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
CLICKHOUSE_MCP_SERVER_TRANSPORT=http
CLICKHOUSE_MCP_AUTH_DISABLED=true # Only for local development!
Al usar transporte HTTP, el servidor se ejecutará en el puerto configurado (predeterminado 8000). Por ejemplo, con la configuración anterior:
- Extremo MCP:
http://localhost:4200/mcp - Verificación de estado:
http://localhost:4200/health
Puedes configurar estas variables en tu entorno, en un archivo .env, o en la configuración de Claude Desktop:
{
"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>",
"CLICKHOUSE_DATABASE": "<optional-database>",
"CLICKHOUSE_MCP_SERVER_TRANSPORT": "stdio",
"CLICKHOUSE_MCP_BIND_HOST": "127.0.0.1",
"CLICKHOUSE_MCP_BIND_PORT": "8000"
}
}
}
}
Nota: La configuración de host y puerto de enlace solo se usa cuando el transporte está configurado como "http" o "sse".
Ejecución de pruebas
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
