Snowflake MCP Service

Un servidor MCP para interactuar con bases de datos Snowflake.

Documentación

Snowflake MCP Service

Un servidor de Model Context Protocol (MCP) que proporciona acceso a bases de datos Snowflake para cualquier cliente compatible con MCP.

GitHub repo License: MIT

Este servidor implementa el Model Context Protocol para permitir que cualquier cliente MCP pueda:

  • Ejecutar consultas SQL en bases de datos Snowflake
  • Gestionar automáticamente el ciclo de vida de la conexión a la base de datos (conectar, reconectar en caso de tiempo de espera, cerrar)
  • Manejar resultados de consultas y errores
  • Realizar operaciones de base de datos de forma segura
  • Conectarse mediante autenticación por contraseña o por par de claves

Descripción General de la Arquitectura

¿Qué es MCP (Model Context Protocol)?

MCP es un protocolo estándar que permite a las aplicaciones comunicarse con modelos de IA y servicios externos. Permite que los modelos de IA accedan a herramientas y fuentes de datos más allá de sus datos de entrenamiento, ampliando sus capacidades a través de una interfaz de comunicación estandarizada. Las características clave incluyen:

  • Basado en comunicación stdio (entrada/salida estándar)
  • Definición y descubrimiento estructurado de herramientas
  • Mecanismo estandarizado de llamada a herramientas
  • Transmisión estructurada de resultados

Componentes del Sistema

El servidor Snowflake-MCP consta de varios componentes clave:

  1. Servidor MCP - Componente central que implementa el protocolo MCP y gestiona las solicitudes de los clientes
  2. Gestor de Conexiones Snowflake - Gestiona las conexiones a la base de datos, incluyendo creación, mantenimiento y limpieza
  3. Procesador de Consultas - Ejecuta consultas SQL en Snowflake y procesa los resultados
  4. Gestor de Autenticación - Maneja diferentes métodos de autenticación (contraseña o clave privada)

alt text

Flujo de Comunicación

El sistema funciona a través del siguiente flujo de comunicación:

  1. Un Cliente MCP (como Claude u otra aplicación compatible con MCP) envía una solicitud al Servidor MCP
  2. El Servidor MCP se autentica con Snowflake utilizando las credenciales del archivo .env
  3. El Servidor MCP ejecuta consultas SQL en Snowflake
  4. Snowflake devuelve los resultados al Servidor MCP
  5. El Servidor MCP formatea y envía los resultados de vuelta al Cliente MCP

alt text

Esta arquitectura permite una integración perfecta entre aplicaciones de IA y bases de datos Snowflake, manteniendo la seguridad y una gestión eficiente de las conexiones.

Instalación

  1. Clona este repositorio
git clone https://github.com/davidamom/snowflake-mcp.git
  1. Instala las dependencias
pip install -r requirements.txt

Configuración

Ejemplo de Configuración del Cliente MCP

A continuación se muestra un ejemplo de configuración para Claude Desktop, pero este servidor funciona con cualquier cliente compatible con MCP. Cada cliente puede tener su propio método de configuración:

{
  "mcpServers": {
    "snowflake": {
      "command": "C:\\Users\\YourUsername\\path\\to\\python.exe",
      "args": ["C:\\path\\to\\snowflake-mcp\\server.py"]
    }
  }
}

Parámetros de configuración:

  • command: Ruta completa a su intérprete de Python. Modifíquela según la ubicación de su instalación de Python.
  • args: Ruta completa al script del servidor. Modifíquela según el lugar donde clonó el repositorio.

Ejemplos de rutas para diferentes sistemas operativos:

Windows:

{
  "mcpServers": {
    "snowflake": {
      "command": "C:\\Users\\YourUsername\\anaconda3\\python.exe",
      "args": ["C:\\Path\\To\\snowflake-mcp\\server.py"]
    }
  }
}

MacOS/Linux:

{
  "mcpServers": {
    "snowflake": {
      "command": "/usr/bin/python3",
      "args": ["/path/to/snowflake-mcp/server.py"]
    }
  }
}

Configuración de Snowflake

Cree un archivo .env en el directorio raíz del proyecto y agregue la siguiente configuración:

# Snowflake Configuration - Basic Info
SNOWFLAKE_USER=your_username          # Your Snowflake username
SNOWFLAKE_ACCOUNT=YourAccount.Region  # Example: MyOrg.US-WEST-2
SNOWFLAKE_DATABASE=your_database      # Your database
SNOWFLAKE_WAREHOUSE=your_warehouse    # Your warehouse
SNOWFLAKE_ROLE=your_role              # Your role

# Authentication - Choose one method

Opciones de Autenticación

Este servidor MCP admite dos métodos de autenticación:

  1. Autenticación por Contraseña

    SNOWFLAKE_PASSWORD=your_password      # Your Snowflake password
    
  2. Autenticación por Par de Claves

    SNOWFLAKE_PRIVATE_KEY_FILE=/path/to/rsa_key.p8     # Path to private key file 
    SNOWFLAKE_PRIVATE_KEY_PASSPHRASE=your_passphrase   # Optional: passphrase if key is encrypted
    

    Para la autenticación por par de claves, primero debe configurar la autenticación por par de claves con Snowflake:

    • Genere un par de claves y registre la clave pública con Snowflake
    • Almacene el archivo de clave privada de forma segura en su máquina
    • Proporcione la ruta completa al archivo de clave privada en la configuración

    Para obtener instrucciones sobre cómo configurar la autenticación por par de claves, consulte la documentación de Snowflake sobre autenticación por par de claves.

Si ambos métodos de autenticación están configurados, el servidor priorizará la autenticación por par de claves.

Gestión de Conexiones

El servidor proporciona funciones automáticas de gestión de conexiones:

  • Inicialización automática de la conexión

    • Crea la conexión cuando se recibe la primera consulta
    • Valida los parámetros de conexión
  • Mantenimiento de la conexión

    • Realiza seguimiento del estado de la conexión
    • Maneja los tiempos de espera de conexión
    • Se reconecta automáticamente si se pierde la conexión
  • Limpieza de la conexión

    • Cierra correctamente las conexiones cuando el servidor se detiene
    • Libera los recursos de manera adecuada

Uso

Uso Estándar

El servidor se iniciará automáticamente cuando se configure con su cliente MCP. No se requiere inicio manual en operación normal. Una vez que el servidor esté en ejecución, su cliente MCP podrá ejecutar consultas de Snowflake.

Para pruebas de desarrollo, puede iniciar el servidor manualmente usando:

python server.py

Nota: No se necesita iniciar el servidor manualmente para uso normal. El cliente MCP normalmente gestionará el inicio y apagado del servidor según la configuración.

Uso con Docker

También puede ejecutar el servidor usando Docker. Este método se recomienda para entornos de producción y garantiza una ejecución consistente en diferentes plataformas.

  1. Construya la imagen de Docker:
docker build -t snowflake-mcp .
  1. Configure su cliente MCP para usar Docker. Ejemplo de configuración:
{
  "mcpServers": {
    "snowflake-docker": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "snowflake-mcp"
      ],
      "env": {
        "SNOWFLAKE_USER": "your_username",
        "SNOWFLAKE_ACCOUNT": "your_account",
        "SNOWFLAKE_DATABASE": "your_database",
        "SNOWFLAKE_WAREHOUSE": "your_warehouse",
        "SNOWFLAKE_PASSWORD": "your_password",
        "SNOWFLAKE_ROLE": "your_role"
        
      }
    }
  }
}

Nota: La implementación de Docker utiliza stdio para la comunicación, por lo que no es necesario exponer puertos.

Si utiliza autenticación por par de claves con Docker, deberá montar su archivo de clave privada:

docker run -i -v /path/to/your/key.p8:/app/rsa_key.p8:ro snowflake-mcp

Y actualice su configuración en consecuencia:

{
  "mcpServers": {
    "Snowflake-Docker": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "-v",
        "/path/to/your/key.p8:/app/rsa_key.p8:ro",
        //optional
        "-v",
        "/path/to/export/dir/:/export/"
        "snowflake-mcp"
      ],
      "env": {
        "SNOWFLAKE_USER": "your_username",
        "SNOWFLAKE_ACCOUNT": "your_account",
        "SNOWFLAKE_DATABASE": "your_database",
        "SNOWFLAKE_WAREHOUSE": "your_warehouse",
        "SNOWFLAKE_ROLE": "your_role",
        "SNOWFLAKE_PRIVATE_KEY_FILE": "path_for_your_private_key",
        "SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "your_password_for_private_key"
      }
    }
  }
}

Características

  • Acceso seguro a bases de datos Snowflake
  • Autenticación flexible (contraseña o autenticación por par de claves)
  • Manejo y reporte robusto de errores
  • Gestión automática de conexiones
  • Ejecución de consultas y procesamiento de resultados
  • Compatible con cualquier cliente que cumpla con MCP

Detalles Técnicos

Componentes Principales

La implementación consta de varias clases y módulos clave:

  • server.py - El punto de entrada principal que contiene la implementación del servidor MCP.
  • SnowflakeConnection - Clase que maneja todas las operaciones de la base de datos Snowflake, incluyendo:
    • Establecimiento y reconexión de conexiones
    • Ejecución de consultas y gestión de transacciones
    • Mantenimiento y limpieza de conexiones
  • SnowflakeMCPServer - La clase principal del servidor que implementa el protocolo MCP:
    • Registra las herramientas disponibles con el marco MCP
    • Maneja las solicitudes de llamada a herramientas de los clientes
    • Gestiona el ciclo de vida de las conexiones

Ciclo de Vida de la Conexión

El ciclo de vida de la conexión se gestiona cuidadosamente para garantizar la fiabilidad:

  1. Inicialización - Las conexiones se crean de forma diferida cuando se recibe la primera consulta
  2. Validación - Los parámetros de conexión se validan antes de intentar conectar
  3. Monitoreo - Las conexiones se prueban regularmente para verificar su validez
  4. Recuperación - Reconexión automática si la conexión se pierde o expira
  5. Limpieza - Liberación adecuada de recursos cuando el servidor se apaga

Interfaz de Herramientas MCP

El servidor expone las siguientes herramientas a los clientes MCP:

  • execute_query - Ejecuta una consulta SQL en Snowflake y devuelve los resultados

    • Entrada: cadena de consulta SQL
    • Salida: resultados de la consulta en un formato estructurado
  • export_to_csv - Ejecuta una consulta SQL en Snowflake y devuelve los resultados

    • Entrada: cadena de consulta SQL
    • Salida: Número de filas exportadas. Ruta del archivo de salida

Esta implementación sigue las mejores prácticas tanto para la implementación del protocolo MCP como para la interacción con la base de datos Snowflake.

Licencia

License: MIT

Este proyecto está licenciado bajo la Licencia MIT. Consulte el archivo LICENSE para más detalles.

Copyright (c) 2025 David Amom