ClickHouse Cloud & On-Prem
Un servidor para gestionar bases de datos ClickHouse y servicios de ClickHouse Cloud.
Documentación
MCP ClickHouse: Operaciones de Base de Datos + Gestión de Cloud
Un servidor integral del Protocolo de Contexto de Modelo (MCP) que proporciona dos capacidades distintas:
- Operaciones de Base de Datos - Conéctese y consulte cualquier base de datos ClickHouse (local, en la nube o autoalojada)
- Gestión de Cloud - Gestión completa de la infraestructura de ClickHouse Cloud mediante API
🚀 Inicio Rápido
Comience con nuestro tutorial paso a paso:
👉 Tutorial de Configuración Completo - Transforme a Claude en un potente agente de datos ClickHouse
Para usuarios experimentados, vaya directamente a la sección Configuración Rápida a continuación.
📚 Tabla de Contenidos
- 🚀 Inicio Rápido
- 📚 Tabla de Contenidos
- 🎯 Elija su Caso de Uso
- 🌟 ¿Por Qué Este Servidor?
- ✨ Resumen de Capacidades
- 🔒 Funciones de Seguridad
- ⚡ Configuración Rápida
- 📦 Instalación
- ⚙️ Guía de Configuración
- 🛠️ Herramientas Disponibles
- 💡 Ejemplos de Uso
- 🔧 Desarrollo
- 🐛 Solución de Problemas
- 📄 Licencia
🎯 Elija su Caso de Uso
Este servidor MCP admite dos casos de uso independientes. Puede utilizar uno o ambos:
📊 Solo Operaciones de Base de Datos
Para: Análisis de datos, consultas y exploración de bases de datos ClickHouse
- Conéctese a cualquier instancia de ClickHouse (local, autoalojada o ClickHouse Cloud)
- Ejecute consultas de solo lectura de forma segura
- Explore esquemas de bases de datos y metadatos
- Configuración: Solo credenciales de conexión a la base de datos
☁️ Solo Gestión de Cloud
Para: Gestión programática de la infraestructura de ClickHouse Cloud
- Cree, configure y gestione servicios en la nube
- Gestione claves API, miembros y organizaciones
- Supervise uso, costos y rendimiento
- Configuración: Solo claves API de ClickHouse Cloud
🔄 Ambos Combinados
Para: Flujo de trabajo completo de ClickHouse desde la infraestructura hasta los datos
- Gestione servicios en la nube Y consulte las bases de datos dentro de ellos
- Gestión integral de pipelines de datos de extremo a extremo
- Configuración: Tanto credenciales de base de datos como claves API de la nube
🌟 ¿Por Qué Este Servidor?
Este repositorio mejora significativamente el servidor MCP original de ClickHouse:
| Característica | Servidor Original (v0.1.10) | Este Servidor |
|---|---|---|
| Operaciones de Base de Datos | 3 herramientas básicas | 3 herramientas mejoradas con funciones de seguridad |
| Seguridad de Consultas | ❌ run_select_query permite CUALQUIER operación SQL | ✅ Filtrado adecuado de consultas y modo de solo lectura |
| Gestión de Cloud | ❌ Ninguna | ✅ Más de 50 herramientas integrales (100% de cobertura de API) |
| Controles de Seguridad | ❌ Sin protección contra operaciones destructivas | ✅ Modos avanzados de solo lectura tanto para operaciones de base de datos como de nube |
| Calidad del Código | Básica | Listo para producción con estructura adecuada |
| Configuración | Opciones limitadas | Configuración flexible para cualquier caso de uso |
| Manejo de Errores | Básico | Robusto con mensajes de error detallados |
| Soporte SSL | Limitado | Opciones completas de configuración SSL |
[!WARNING] Aviso de Seguridad: El servidor MCP original de ClickHouse (v0.1.10) tiene una falla de seguridad crítica donde
run_select_querypuede ejecutar CUALQUIER operación SQL, incluidos DROP, DELETE, INSERT, etc., a pesar de que su nombre sugiere que solo ejecuta consultas SELECT. Este servidor implementa filtrado adecuado de consultas y controles de seguridad.
✨ Resumen de Capacidades
📊 Operaciones de Base de Datos (3 Herramientas)
Conéctese y consulte cualquier base de datos ClickHouse:
- Liste bases de datos y tablas con metadatos detallados
- Ejecute consultas SELECT con garantías de seguridad (modo de solo lectura)
- Explore esquemas incluidos tipos de columnas, recuentos de filas y estructuras de tablas
- Funciona con: ClickHouse local, instancias autoalojadas, bases de datos ClickHouse Cloud y el SQL Playground gratuito
☁️ Gestión de Cloud (Más de 50 Herramientas)
Integración completa con la API de ClickHouse Cloud:
- Organizaciones (5 herramientas): Gestione configuraciones, métricas, endpoints privados
- Servicios (12 herramientas): Cree, escale, inicie/detenga, configure y elimine servicios en la nube
- Claves API (5 herramientas): Operaciones CRUD completas para acceso programático
- Miembros e Invitaciones (8 herramientas): Gestión de usuarios y control de acceso
- Copias de Seguridad (4 herramientas): Configure y gestione copias de seguridad automáticas
- ClickPipes (7 herramientas): Gestión de pipelines de ingesta de datos
- Monitoreo (3 herramientas): Análisis de uso, costos y registros de auditoría
- Red (6 herramientas): Endpoints privados y configuración de seguridad
🔒 Funciones de Seguridad
Este servidor MCP incluye controles de seguridad integrales para prevenir modificaciones accidentales de datos o cambios en la infraestructura:
📊 Seguridad de Base de Datos
- Modo de Solo Lectura Automático: Todas las consultas de base de datos se ejecutan con
readonly = 1por defecto - Filtrado de Consultas: Solo se permiten consultas SELECT, SHOW, DESCRIBE y EXPLAIN
- Anulación Manual: Establezca
CLICKHOUSE_READONLY=falsepara habilitar operaciones de escritura cuando sea necesario
☁️ Seguridad de Gestión de Cloud
- Operaciones Protegidas: Las operaciones destructivas en la nube (eliminar, detener) se pueden habilitar
- Modo Seguro: Establezca
CLICKHOUSE_CLOUD_READONLY=falsepara permitir cambios en la infraestructura - Registro de Auditoría: Todas las operaciones se registran para fines de responsabilidad
🛡️ Mejores Prácticas de Seguridad
- Privilegios Mínimos: Cree usuarios dedicados con permisos limitados
- SSL por Defecto: Conexiones seguras habilitadas automáticamente
- Variables de Entorno: Las credenciales sensibles nunca se codifican directamente
- Controles de Tiempo de Espera: Previenen consultas y operaciones descontroladas
⚡ Configuración Rápida
Configuración de Claude Desktop
-
Abra su archivo de configuración de Claude Desktop:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%/Claude/claude_desktop_config.json
- macOS:
-
Elija su configuración según su caso de uso:
📊 Solo Operaciones de Base de Datos (Haga clic para expandir)
Para su Propio Servidor ClickHouse
{
"mcpServers": {
"chmcp": {
"command": "/path/to/uv",
"args": ["run", "--with", "chmcp", "--python", "3.13", "chmcp"],
"env": {
"CLICKHOUSE_HOST": "your-server.com",
"CLICKHOUSE_PORT": "8443",
"CLICKHOUSE_USER": "your-username",
"CLICKHOUSE_PASSWORD": "your-password",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_READONLY": "true"
}
}
}
}
Para Base de Datos ClickHouse Cloud
{
"mcpServers": {
"chmcp": {
"command": "/path/to/uv",
"args": ["run", "--with", "chmcp", "--python", "3.13", "chmcp"],
"env": {
"CLICKHOUSE_HOST": "your-instance.clickhouse.cloud",
"CLICKHOUSE_USER": "default",
"CLICKHOUSE_PASSWORD": "your-database-password",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_READONLY": "true"
}
}
}
}
Para Pruebas Gratuitas (SQL Playground)
{
"mcpServers": {
"chmcp": {
"command": "/path/to/uv",
"args": ["run", "--with", "chmcp", "--python", "3.13", "chmcp"],
"env": {
"CLICKHOUSE_HOST": "sql-clickhouse.clickhouse.com",
"CLICKHOUSE_PORT": "8443",
"CLICKHOUSE_USER": "demo",
"CLICKHOUSE_PASSWORD": "",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_READONLY": "true"
}
}
}
}
☁️ Solo Gestión de Cloud (Haga clic para expandir)
{
"mcpServers": {
"chmcp": {
"command": "/path/to/uv",
"args": ["run", "--with", "chmcp", "--python", "3.13", "chmcp"],
"env": {
"CLICKHOUSE_CLOUD_KEY_ID": "your-cloud-key-id",
"CLICKHOUSE_CLOUD_KEY_SECRET": "your-cloud-key-secret"
}
}
}
}
Nota:
CLICKHOUSE_CLOUD_READONLYtiene como valor predeterminadotrue(modo solo monitoreo). Agregue"CLICKHOUSE_CLOUD_READONLY": "false"para acceso completo.
🔄 Ambos: Base de Datos + Gestión de Cloud (Haga clic para expandir)
{
"mcpServers": {
"chmcp": {
"command": "/path/to/uv",
"args": ["run", "--with", "chmcp", "--python", "3.13", "chmcp"],
"env": {
"CLICKHOUSE_HOST": "your-instance.clickhouse.cloud",
"CLICKHOUSE_USER": "default",
"CLICKHOUSE_PASSWORD": "your-database-password",
"CLICKHOUSE_SECURE": "true",
"CLICKHOUSE_READONLY": "true",
"CLICKHOUSE_CLOUD_KEY_ID": "your-cloud-key-id",
"CLICKHOUSE_CLOUD_KEY_SECRET": "your-cloud-key-secret"
}
}
}
}
Nota: Esto habilita el análisis de base de datos (solo lectura) + gestión completa de la nube. Agregue
"CLICKHOUSE_CLOUD_READONLY": "true"para el modo solo monitoreo.
-
Importante: Reemplace
/path/to/uvcon la ruta absoluta a su ejecutableuv(encuéntrelo conwhich uven macOS/Linux) -
Reinicie Claude Desktop para aplicar los cambios
📦 Instalación
Opción 1: Usando uv (Recomendado)
# Install via uv (used by Claude Desktop)
uv add chmcp
Opción 2: Instalación Manual
# Clone the repository
git clone https://github.com/oualib/chmcp.git
cd chmcp
# Install core dependencies
pip install .
# Install with development dependencies
pip install ".[dev]"
# Install with test dependencies
pip install ".[test]"
# Install with documentation dependencies
pip install ".[docs]"
# Install with all optional dependencies
pip install ".[dev,test,docs]"
# Set up environment variables
cp .env.example .env
# Edit .env with your configuration
⚙️ Guía de Configuración
📊 Configuración de Base de Datos
Establezca estas variables de entorno para habilitar las operaciones de base de datos:
Variables Requeridas
CLICKHOUSE_HOST=your-clickhouse-host.com # ClickHouse server hostname
CLICKHOUSE_USER=your-username # Username for authentication
CLICKHOUSE_PASSWORD=your-password # Password for authentication
Variables de Seguridad y Protección
CLICKHOUSE_READONLY=true # Enable read-only mode (recommended)
# true: Only SELECT/SHOW/DESCRIBE queries allowed
# false: All SQL operations permitted
Variables Opcionales (con valores predeterminados)
CLICKHOUSE_PORT=8443 # 8443 for HTTPS, 8123 for HTTP
CLICKHOUSE_SECURE=true # Enable HTTPS connection
CLICKHOUSE_VERIFY=true # Verify SSL certificates
CLICKHOUSE_CONNECT_TIMEOUT=30 # Connection timeout in seconds
CLICKHOUSE_SEND_RECEIVE_TIMEOUT=300 # Query timeout in seconds
CLICKHOUSE_DATABASE=default # Default database to use
[!CAUTION] Mejor Práctica de Seguridad: Utilice siempre
CLICKHOUSE_READONLY=trueen entornos de producción. Cree un usuario de base de datos dedicado con privilegios mínimos para las conexiones MCP. Evite usar cuentas administrativas.
☁️ Configuración de API de Cloud
Establezca estas variables de entorno para habilitar la gestión de la nube:
Variables Requeridas
CLICKHOUSE_CLOUD_KEY_ID=your-cloud-key-id # From ClickHouse Cloud Console
CLICKHOUSE_CLOUD_KEY_SECRET=your-cloud-key-secret # From ClickHouse Cloud Console
Variables de Seguridad y Protección
CLICKHOUSE_CLOUD_READONLY=false # Cloud operation mode (default: false)
# true: Only read operations (list, get, metrics)
# false: All cloud operations permitted (create, update, delete)
Variables Opcionales (con valores predeterminados)
CLICKHOUSE_CLOUD_API_URL=https://api.clickhouse.cloud # API endpoint
CLICKHOUSE_CLOUD_TIMEOUT=30 # Request timeout
CLICKHOUSE_CLOUD_SSL_VERIFY=true # SSL verification
[!WARNING] Seguridad en la Nube: Por defecto,
CLICKHOUSE_CLOUD_READONLY=falsepermite todas las operaciones de infraestructura. Establézcalo entrueen producción para prevenir cambios accidentales en la infraestructura. Cuando está deshabilitado, Claude puede crear, modificar y eliminar servicios en la nube, lo que puede generar costos o causar interrupciones del servicio.
🔑 Obtención de Claves API de ClickHouse Cloud
- Inicie sesión en Consola de ClickHouse Cloud
- Navegue a Configuración → Claves API
- Haga clic en Crear Clave API
- Seleccione los permisos apropiados:
- Administrador: Acceso completo a todos los recursos
- Desarrollador: Gestión de servicios y recursos
- Endpoints de Consulta: Limitado a operaciones de consulta
- Copie el ID de Clave y el Secreto de Clave a su configuración
🔒 Ejemplos de Configuración de Seguridad
Modo Seguro de Producción (Recomendado)
# Database - read-only queries only
CLICKHOUSE_HOST=your-instance.clickhouse.cloud
CLICKHOUSE_USER=readonly_user
CLICKHOUSE_PASSWORD=secure-password
CLICKHOUSE_SECURE=true
CLICKHOUSE_READONLY=true
# Cloud - monitoring and inspection only (explicitly set to true)
CLICKHOUSE_CLOUD_KEY_ID=your-cloud-key-id
CLICKHOUSE_CLOUD_KEY_SECRET=your-cloud-key-secret
CLICKHOUSE_CLOUD_READONLY=true
Modo de Desarrollo (Acceso Completo)
# Database - all operations allowed
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
CLICKHOUSE_SECURE=false
CLICKHOUSE_READONLY=false
# Cloud - full infrastructure management
CLICKHOUSE_CLOUD_KEY_ID=dev-key-id
CLICKHOUSE_CLOUD_KEY_SECRET=dev-key-secret
CLICKHOUSE_CLOUD_READONLY=false
Modo Solo Análisis
# Database - read-only for data analysis
CLICKHOUSE_HOST=analytics.company.com
CLICKHOUSE_USER=analyst
CLICKHOUSE_PASSWORD=analyst-password
CLICKHOUSE_SECURE=true
CLICKHOUSE_READONLY=true
# Cloud - monitoring only, no infrastructure changes
CLICKHOUSE_CLOUD_KEY_ID=monitoring-key-id
CLICKHOUSE_CLOUD_KEY_SECRET=monitoring-key-secret
CLICKHOUSE_CLOUD_READONLY=true
Ejemplos de Configuración
Desarrollo Local con Docker
# Database only - full access for development
CLICKHOUSE_HOST=localhost
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=clickhouse
CLICKHOUSE_SECURE=false
CLICKHOUSE_PORT=8123
CLICKHOUSE_READONLY=false
ClickHouse Cloud (Modo Seguro)
# Database connection - read-only
CLICKHOUSE_HOST=your-instance.clickhouse.cloud
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=your-database-password
CLICKHOUSE_SECURE=true
CLICKHOUSE_READONLY=true
# Cloud management - monitoring only (explicitly set to true)
CLICKHOUSE_CLOUD_KEY_ID=your-cloud-key-id
CLICKHOUSE_CLOUD_KEY_SECRET=your-cloud-key-secret
CLICKHOUSE_CLOUD_READONLY=true
Solución de Problemas SSL
Si encuentra problemas de verificación de certificados SSL:
# Disable SSL verification for database
CLICKHOUSE_VERIFY=false
CLICKHOUSE_SECURE=false # Use HTTP instead of HTTPS
CLICKHOUSE_PORT=8123 # HTTP port instead of 8443
# Disable SSL verification for cloud API
CLICKHOUSE_CLOUD_SSL_VERIFY=false
🛠️ Herramientas Disponibles
📊 Herramientas de Base de Datos (3 herramientas)
Estas herramientas funcionan con cualquier base de datos ClickHouse cuando se proporciona la configuración de base de datos:
list_databases()- Liste todas las bases de datos disponibleslist_tables(database, like?, not_like?)- Liste tablas con metadatos detallados, incluidos esquema, recuentos de filas e información de columnasrun_query(query)- Ejecute consultas con controles de seguridad:- Modo de solo lectura (
CLICKHOUSE_READONLY=true): Solo consultas SELECT, SHOW, DESCRIBE, EXPLAIN - Modo de acceso completo (
CLICKHOUSE_READONLY=false): Todas las operaciones SQL, incluidas INSERT, UPDATE, DELETE, CREATE, DROP
- Modo de solo lectura (
[!NOTE] Seguridad de Consultas: Cuando
CLICKHOUSE_READONLY=true, todas las consultas se ejecutan automáticamente con la configuraciónreadonly = 1y se filtran para prevenir operaciones de modificación de datos.
☁️ Herramientas de Gestión de Cloud (Más de 50 herramientas)
Estas herramientas funcionan con ClickHouse Cloud cuando se proporcionan credenciales API. La disponibilidad de herramientas depende de la configuración CLICKHOUSE_CLOUD_READONLY:
🔍 Operaciones de Solo Lectura (Disponibles cuando CLICKHOUSE_CLOUD_READONLY=true)
Monitoreo de Organizaciones (3 herramientas)
cloud_list_organizations()- Liste las organizaciones disponiblescloud_get_organization(organization_id)- Obtenga detalles de la organizacióncloud_get_organization_metrics(organization_id, filtered_metrics?)- Obtenga métricas de Prometheus
Monitoreo de Servicios (3 herramientas)
cloud_list_services(organization_id)- Liste todos los servicios en la organizacióncloud_get_service(organization_id, service_id)- Obtenga información detallada del serviciocloud_get_service_metrics(organization_id, service_id, filtered_metrics?)- Obtenga métricas de rendimiento del servicio
Inspección de Recursos (8 herramientas)
cloud_list_api_keys(organization_id)- Liste todas las claves API (solo metadatos)cloud_get_api_key(organization_id, key_id)- Obtenga detalles de la clave APIcloud_list_members(organization_id)- Liste los miembros de la organizacióncloud_get_member(organization_id, user_id)- Obtenga detalles del miembrocloud_list_invitations(organization_id)- Liste las invitaciones pendientescloud_get_invitation(organization_id, invitation_id)- Obtenga detalles de la invitacióncloud_list_backups(organization_id, service_id)- Liste las copias de seguridad del serviciocloud_get_backup(organization_id, service_id, backup_id)- Obtenga detalles de la copia de seguridad
Inspección de Configuración (5 herramientas)
cloud_get_backup_configuration(organization_id, service_id)- Obtenga la configuración de copias de seguridadcloud_get_private_endpoint_config(organization_id, service_id)- Obtenga la configuración de endpoints privadoscloud_list_clickpipes(organization_id, service_id)- Liste los ClickPipescloud_get_clickpipe(organization_id, service_id, clickpipe_id)- Obtenga detalles del ClickPipecloud_get_available_regions()- Obtenga las regiones admitidas
Analítica y Monitoreo (3 herramientas)
cloud_list_activities(organization_id, from_date?, to_date?)- Obtenga registros de auditoríacloud_get_activity(organization_id, activity_id)- Obtenga detalles de actividadcloud_get_usage_cost(organization_id, from_date, to_date)- Obtenga análisis de uso
⚠️ Operaciones de Escritura (Disponibles solo cuando CLICKHOUSE_CLOUD_READONLY=false)
Gestión de Organizaciones (2 herramientas)
cloud_update_organization(organization_id, name?, private_endpoints?)- Actualice la configuración de la organizacióncloud_get_organization_private_endpoint_info(organization_id, cloud_provider, region)- Obtenga información del endpoint privado Gestión de Servicios (9 herramientas)cloud_create_service(organization_id, name, provider, region, ...)- Crear nuevo serviciocloud_update_service(organization_id, service_id, ...)- Actualizar configuración del serviciocloud_update_service_state(organization_id, service_id, command)- Iniciar/detener servicioscloud_update_service_scaling(organization_id, service_id, ...)- Configurar escalado (heredado)cloud_update_service_replica_scaling(organization_id, service_id, ...)- Configurar escalado de réplicascloud_update_service_password(organization_id, service_id, ...)- Actualizar contraseña del serviciocloud_create_service_private_endpoint(organization_id, service_id, id, description)- Crear endpoint privadocloud_delete_service(organization_id, service_id)- Eliminar servicio
Gestión de Claves API (3 herramientas)
cloud_create_api_key(organization_id, name, roles, ...)- Crear nueva clave APIcloud_update_api_key(organization_id, key_id, ...)- Actualizar propiedades de la clave APIcloud_delete_api_key(organization_id, key_id)- Eliminar clave API
Gestión de Usuarios (3 herramientas)
cloud_update_member_role(organization_id, user_id, role)- Actualizar rol de miembrocloud_remove_member(organization_id, user_id)- Eliminar miembrocloud_create_invitation(organization_id, email, role)- Enviar invitacióncloud_delete_invitation(organization_id, invitation_id)- Cancelar invitación
Gestión de Infraestructura (12 herramientas)
cloud_update_backup_configuration(organization_id, service_id, ...)- Actualizar configuración de copias de seguridadcloud_create_clickpipe(organization_id, service_id, name, description, source, destination, field_mappings?)- Crear ClickPipecloud_update_clickpipe(organization_id, service_id, clickpipe_id, ...)- Actualizar ClickPipecloud_update_clickpipe_scaling(organization_id, service_id, clickpipe_id, replicas?)- Escalar ClickPipecloud_update_clickpipe_state(organization_id, service_id, clickpipe_id, command)- Controlar estado de ClickPipecloud_delete_clickpipe(organization_id, service_id, clickpipe_id)- Eliminar ClickPipecloud_list_reverse_private_endpoints(organization_id, service_id)- Listar endpoints privados inversoscloud_create_reverse_private_endpoint(organization_id, service_id, ...)- Crear endpoint privado inversocloud_get_reverse_private_endpoint(organization_id, service_id, reverse_private_endpoint_id)- Obtener detallescloud_delete_reverse_private_endpoint(organization_id, service_id, reverse_private_endpoint_id)- Eliminar endpointcloud_create_query_endpoint_config(organization_id, service_id, roles, open_api_keys, allowed_origins)- Crear configuración de consultacloud_delete_query_endpoint_config(organization_id, service_id)- Eliminar configuración de consulta
[!CAUTION] Advertencia de Producción: Las operaciones de escritura pueden crear recursos facturables, modificar servicios en ejecución o eliminar infraestructura. Utilice siempre
CLICKHOUSE_CLOUD_READONLY=trueen producción a menos que se requieran específicamente cambios de infraestructura.
💡 Ejemplos de Uso
📊 Ejemplos de Operaciones de Base de Datos
Modo de Análisis Seguro
# With CLICKHOUSE_READONLY=true (recommended for production)
# Only analytical queries are allowed
# Explore database structure
databases = list_databases()
print(f"Available databases: {[db['name'] for db in databases]}")
# Get detailed table information
tables = list_tables("my_database")
for table in tables:
print(f"Table: {table['name']}, Rows: {table['total_rows']}")
# Execute analytical queries safely
result = run_query("""
SELECT
date_trunc('day', timestamp) as day,
count(*) as events,
avg(value) as avg_value
FROM my_table
WHERE timestamp >= '2024-01-01'
GROUP BY day
ORDER BY day
""")
# These queries would be blocked in readonly mode:
# run_query("DROP TABLE my_table") # ❌ Blocked
# run_query("INSERT INTO my_table VALUES (1)") # ❌ Blocked
# run_query("UPDATE my_table SET value = 0") # ❌ Blocked
Modo de Acceso Completo
# With CLICKHOUSE_READONLY=false (development only)
# All SQL operations are allowed
# Data modification operations
run_query("""
CREATE TABLE test_table (
id UInt32,
name String,
created_at DateTime
) ENGINE = MergeTree()
ORDER BY id
""")
run_query("INSERT INTO test_table VALUES (1, 'test', now())")
run_query("UPDATE test_table SET name = 'updated' WHERE id = 1")
☁️ Ejemplos de Gestión en la Nube
Modo de Monitoreo (Seguro)
# With CLICKHOUSE_CLOUD_READONLY=true (recommended for production)
# Only monitoring and inspection operations
# Monitor organization resources
orgs = cloud_list_organizations()
for org in orgs:
services = cloud_list_services(org['id'])
print(f"Organization: {org['name']}, Services: {len(services)}")
# Get service metrics
for service in services:
metrics = cloud_get_service_metrics(org['id'], service['id'])
print(f"Service {service['name']} metrics: {metrics}")
# Monitor costs and usage
usage = cloud_get_usage_cost(
organization_id="org-123",
from_date="2024-01-01",
to_date="2024-01-31"
)
print(f"Monthly cost: ${usage['total_cost']}")
# Audit recent activities
activities = cloud_list_activities(
organization_id="org-123",
from_date="2024-01-01T00:00:00Z"
)
print(f"Recent activities: {len(activities)} events")
# These operations would be blocked in readonly mode:
# cloud_create_service(...) # ❌ Blocked
# cloud_delete_service(...) # ❌ Blocked
# cloud_update_service_state(...) # ❌ Blocked
Gestión de Infraestructura (Acceso Completo)
# With CLICKHOUSE_CLOUD_READONLY=false (use with caution)
# All infrastructure operations allowed
# Create a production service with full configuration
service = cloud_create_service(
organization_id="org-123",
name="analytics-prod",
provider="aws",
region="us-east-1",
tier="production",
min_replica_memory_gb=32,
max_replica_memory_gb=256,
num_replicas=3,
idle_scaling=True,
idle_timeout_minutes=10,
ip_access_list=[
{"source": "10.0.0.0/8", "description": "Internal network"},
{"source": "203.0.113.0/24", "description": "Office network"}
]
)
# Start the service and monitor status
cloud_update_service_state(
organization_id="org-123",
service_id=service['id'],
command="start"
)
# Set up automated backups
cloud_update_backup_configuration(
organization_id="org-123",
service_id=service['id'],
backup_period_in_hours=24,
backup_retention_period_in_hours=168, # 7 days
backup_start_time="02:00"
)
🔄 Ejemplo de Flujo de Trabajo Combinado Seguro
# Production-safe configuration for monitoring and analysis
# CLICKHOUSE_READONLY=true + CLICKHOUSE_CLOUD_READONLY=true
# 1. Monitor existing cloud infrastructure
orgs = cloud_list_organizations()
org_id = orgs[0]['id']
services = cloud_list_services(org_id)
active_services = [s for s in services if s['state'] == 'running']
print(f"Active services: {len(active_services)}")
# 2. Analyze data from running services
for service in active_services:
# Check service health
metrics = cloud_get_service_metrics(org_id, service['id'])
# Analyze data (read-only queries)
if service['endpoints']:
# Connect to database (would use service endpoint)
result = run_query("""
SELECT
database,
table,
sum(rows) as total_rows,
sum(bytes_on_disk) as disk_usage
FROM system.parts
WHERE active = 1
GROUP BY database, table
ORDER BY total_rows DESC
LIMIT 10
""")
print(f"Top tables in {service['name']}: {result}")
# 3. Generate usage report
usage = cloud_get_usage_cost(
organization_id=org_id,
from_date="2024-01-01",
to_date="2024-01-31"
)
activities = cloud_list_activities(org_id)
recent_changes = [a for a in activities if 'create' in a.get('action', '').lower()]
print(f"""
Monthly Report:
- Total Cost: ${usage.get('total_cost', 'N/A')}
- Active Services: {len(active_services)}
- Recent Infrastructure Changes: {len(recent_changes)}
""")
🔧 Desarrollo
Configuración de Desarrollo Local
-
Iniciar ClickHouse para pruebas:
cd test-services docker compose up -d -
Crear archivo de entorno:
cat > .env << EOF # Database configuration (development mode) CLICKHOUSE_HOST=localhost CLICKHOUSE_PORT=8123 CLICKHOUSE_USER=default CLICKHOUSE_PASSWORD=clickhouse CLICKHOUSE_SECURE=false CLICKHOUSE_READONLY=false # Cloud configuration (optional, safe mode) CLICKHOUSE_CLOUD_KEY_ID=your-key-id CLICKHOUSE_CLOUD_KEY_SECRET=your-key-secret CLICKHOUSE_CLOUD_READONLY=true EOF -
Instalar y ejecutar:
uv sync # Install dependencies source .venv/bin/activate # Activate virtual environment mcp dev chmcp/mcp_server.py # Start for testing # OR python -m chmcp.main # Start normally
Pruebas de Funciones de Seguridad
# Test read-only database mode
CLICKHOUSE_READONLY=true python -m chmcp.main
# Test cloud monitoring mode
CLICKHOUSE_CLOUD_READONLY=true python -m chmcp.main
# Test full access mode (development only)
CLICKHOUSE_READONLY=false CLICKHOUSE_CLOUD_READONLY=false python -m chmcp.main
Estructura del Proyecto
chmcp/
├── __init__.py # Package initialization
├── main.py # Entry point
├── mcp_env.py # Database environment configuration
├── mcp_server.py # Main server + database tools (3 tools)
├── cloud_config.py # Cloud API configuration
├── cloud_client.py # HTTP client for Cloud API
└── cloud_tools.py # Cloud MCP tools (50+ tools)
Ejecución de Pruebas
uv sync --all-extras --dev # Install dev dependencies
uv run ruff check . # Run linting
docker compose up -d # Start test ClickHouse
uv run pytest tests # Run tests
🐛 Solución de Problemas
📊 Problemas de Conexión a la Base de Datos
Problema: No se puede conectar a la base de datos ClickHouse
- ✅ Verifique
CLICKHOUSE_HOST,CLICKHOUSE_USERyCLICKHOUSE_PASSWORD - ✅ Pruebe la conectividad de red:
telnet your-host 8443 - ✅ Verifique que el firewall permita conexiones en el puerto especificado
- ✅ Para problemas de SSL, intente configurar
CLICKHOUSE_VERIFY=false - ✅ Asegúrese de que el usuario de la base de datos tenga permisos SELECT apropiados
Problema: La verificación del certificado SSL falla
# Temporarily disable SSL verification
CLICKHOUSE_VERIFY=false
CLICKHOUSE_SECURE=false # Use HTTP instead of HTTPS
CLICKHOUSE_PORT=8123 # HTTP port instead of 8443
Problema: Las consultas están siendo bloqueadas
- ✅ Verifique si
CLICKHOUSE_READONLY=trueestá impidiendo operaciones de escritura - ✅ Para desarrollo, configure temporalmente
CLICKHOUSE_READONLY=false - ✅ Revise la consulta para detectar operaciones prohibidas (INSERT, UPDATE, DELETE, CREATE, DROP)
- ✅ Utilice consultas SHOW, DESCRIBE, EXPLAIN o SELECT en su lugar
☁️ Problemas con la API en la Nube
Problema: Las herramientas en la nube no funcionan
- ✅ Verifique que
CLICKHOUSE_CLOUD_KEY_IDyCLICKHOUSE_CLOUD_KEY_SECRETsean correctos - ✅ Compruebe los permisos de la clave API en la Consola de ClickHouse Cloud
- ✅ Asegúrese de que la clave API esté activa y no haya expirado
- ✅ Para problemas de SSL, intente configurar
CLICKHOUSE_CLOUD_SSL_VERIFY=false
Problema: Errores de "Operación no permitida"
- ✅ Verifique si
CLICKHOUSE_CLOUD_READONLY=trueestá bloqueando operaciones de escritura - ✅ Para gestión de infraestructura, configure
CLICKHOUSE_CLOUD_READONLY=false - ✅ Verifique que la clave API tenga permisos suficientes para la operación solicitada
- ✅ Revise el tipo de operación: las operaciones de monitoreo funcionan en modo solo lectura, las operaciones de gestión requieren acceso de escritura
Problema: Errores de "Organización no encontrada"
- ✅ Liste las organizaciones primero:
cloud_list_organizations() - ✅ Verifique que su clave API tenga acceso a la organización
- ✅ Compruebe que está utilizando el formato correcto de ID de organización
🔧 Problemas Generales
Problema: Herramientas faltantes en Claude
- ✅ Las herramientas de base de datos requieren configuración de base de datos (
CLICKHOUSE_HOST, etc.) - ✅ Las herramientas en la nube requieren configuración de API (
CLICKHOUSE_CLOUD_KEY_ID, etc.) - ✅ Verifique la sintaxis del archivo de configuración de Claude Desktop
- ✅ Reinicie Claude Desktop después de los cambios de configuración
- ✅ Verifique que la ruta
uvsea absoluta en la configuración
Problema: Las funciones de seguridad no funcionan como se espera
- ✅ Confirme que las variables de entorno estén configuradas correctamente:
echo $CLICKHOUSE_READONLY - ✅ Verifique que los valores booleanos sean cadenas:
"true"notrueen la configuración JSON - ✅ Reinicie el servidor MCP después de cambiar la configuración de solo lectura
- ✅ Pruebe primero con operaciones simples para verificar el comportamiento
Problema: Errores de importación o dependencias faltantes
# Reinstall with latest dependencies
uv sync --force
# Core dependencies with force reinstall
pip install . --force-reinstall
# With development dependencies
pip install ".[dev]" --force-reinstall
# With all optional dependencies
pip install ".[dev,test,docs]" --force-reinstall
# Editable install with force reinstall
pip install -e ".[dev]" --force-reinstall
🔒 Solución de Problemas de Configuración de Seguridad
Problema: Desea habilitar operaciones de escritura temporalmente
# For database operations
export CLICKHOUSE_READONLY=false
# For cloud operations
export CLICKHOUSE_CLOUD_READONLY=false
# Restart MCP server
Problema: Habilitó accidentalmente el modo de escritura en producción
# Immediately disable write operations
export CLICKHOUSE_READONLY=true
export CLICKHOUSE_CLOUD_READONLY=true
# Restart MCP server
# Review audit logs: cloud_list_activities()
Problema: No está claro qué operaciones están bloqueadas
- ✅ El modo solo lectura de base de datos bloquea: INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, TRUNCATE
- ✅ El modo solo lectura de base de datos permite: SELECT, SHOW, DESCRIBE, EXPLAIN, WITH (solo lectura)
- ✅ El modo solo lectura en la nube bloquea: create_, update_, delete_*, iniciar/detener servicios
- ✅ El modo solo lectura en la nube permite: list_, get_, métricas, monitoreo, análisis
📄 Licencia
Este proyecto está licenciado bajo la Licencia Apache 2.0. Consulte el archivo LICENSE para más detalles.
Desarrollado por Badr Ouali