Skip to main content
Glama

Snowflake MCP Service

MIT License
2
  • Apple
  • Linux

Snowflake MCP 服务

模型上下文协议 (MCP) 服务器,为任何兼容 MCP 的客户端提供对 Snowflake 数据库的访问。

GitHub 仓库许可证:MIT

该服务器实现了模型上下文协议,以允许任何 MCP 客户端:

  • 在 Snowflake 数据库上执行 SQL 查询
  • 自动处理数据库连接生命周期(连接、超时重新连接、关闭)
  • 处理查询结果和错误
  • 安全地执行数据库操作
  • 使用密码或密钥对身份验证进行连接

架构概述

什么是 MCP(模型上下文协议)?

MCP 是一种标准协议,允许应用程序与 AI 模型和外部服务进行通信。它使 AI 模型能够访问训练数据以外的工具和数据源,从而通过标准化通信接口扩展其功能。主要功能包括:

  • 基于stdio通信(标准输入/输出)
  • 结构化工具定义和发现
  • 标准化工具调用机制
  • 结构化结果传输

系统组件

Snowflake-MCP 服务器由几个关键组件组成:

  1. MCP 服务器- 实现 MCP 协议并处理客户端请求的中央组件
  2. Snowflake 连接管理器- 管理数据库连接,包括创建、维护和清理
  3. 查询处理器——在 Snowflake 上执行 SQL 查询并处理结果
  4. 身份验证管理器- 处理不同的身份验证方法(密码或私钥)

替代文本

通信流程

该系统通过以下通信流程工作:

  1. MCP 客户端(例如 Claude 或其他兼容 MCP 的应用程序)向 MCP 服务器发送请求
  2. MCP 服务器使用.env文件中的凭证向 Snowflake 进行身份验证
  3. MCP 服务器在 Snowflake 上执行 SQL 查询
  4. Snowflake 将结果返回给 MCP 服务器
  5. MCP 服务器格式化并将结果发送回 MCP 客户端

替代文本

该架构允许AI应用程序和Snowflake数据库之间的无缝集成,同时保持安全性和高效的连接管理。

安装

  1. 克隆此存储库
git clone https://github.com/davidamom/snowflake-mcp.git
  1. 安装依赖项
pip install -r requirements.txt

配置

MCP 客户端配置示例

以下是 Claude Desktop 的示例配置,但此服务器可与任何兼容 MCP 的客户端兼容。每个客户端可能有自己的配置方法:

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

配置参数:

  • command :Python 解释器的完整路径。请根据您的 Python 安装位置进行修改。
  • args :服务器脚本的完整路径。请根据您克隆存储库的位置进行修改。

不同操作系统的示例路径:

视窗:

{ "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"] } } }

雪花配置

在项目根目录下创建.env文件,并添加以下配置:

# 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 # Authentication - Choose one method
身份验证选项

此 MCP 服务器支持两种身份验证方法:

  1. 密码验证
    SNOWFLAKE_PASSWORD=your_password # Your Snowflake password
  2. 密钥对认证
    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
    对于密钥对认证,您必须首先使用 Snowflake 设置密钥对认证:
    • 生成密钥对,并向 Snowflake 注册公钥
    • 将私钥文件安全地存储在您的机器上
    • 在配置中提供私钥文件的完整路径

    有关设置密钥对认证的说明,请参阅Snowflake 文档中的密钥对认证

如果两种认证方式都配置了,服务器会优先进行密钥对认证。

连接管理

服务器提供自动连接管理功能:

  • 自动连接初始化
    • 收到第一个查询时创建连接
    • 验证连接参数
  • 连接维护
    • 跟踪连接状态
    • 处理连接超时
    • 如果连接丢失则自动重新连接
  • 连接清理
    • 服务器停止时正确关闭连接
    • 适当释放资源

用法

标准用法

使用您的 MCP 客户端配置后,服务器将自动启动。正常运行时无需手动启动。服务器运行后,您的 MCP 客户端将能够执行 Snowflake 查询。

对于开发测试,您可以使用以下方式手动启动服务器:

python server.py

注意:正常使用时无需手动启动服务器。MCP ��户端通常会根据配置管理服务器的启动和关闭。

Docker 使用

您也可以使用 Docker 运行服务器。建议在生产环境中使用此方法,以确保在不同平台上的执行一致性。

  1. 构建 Docker 镜像:
docker build -t snowflake-mcp .
  1. 配置您的 MCP 客户端以使用 Docker。示例配置:
{ "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" } } } }

注意:Docker 实现使用 stdio 进行通信,因此不需要公开端口。

如果使用 Docker 的密钥对身份验证,则需要挂载您的私钥文件:

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

并相应地更新您的配置:

{ "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_PRIVATE_KEY_FILE": "/app/rsa_key.p8" } } } }

特征

  • 安全的 Snowflake 数据库访问
  • 灵活的身份验证(密码或密钥对身份验证)
  • 强大的错误处理和报告
  • 自动连接管理
  • 查询执行和结果处理
  • 与任何符合 MCP 标准的客户端兼容

技术细节

核心组件

该实现由几个关键的类和模块组成:

  • **server.py——**包含 MCP 服务器实现的主入口点。
  • SnowflakeConnection - 处理所有 Snowflake 数据库操作的类,包括:
    • 连接建立和重新连接
    • 查询执行和事务管理
    • 连接维护和清理
  • **SnowflakeMCPServer——**实现 MCP 协议的主服务器类:
    • 向 MCP 框架注册可用的工具
    • 处理来自客户端的工具调用请求
    • 管理连接的生命周期

连接生命周期

连接生命周期经过精心管理以确保可靠性:

  1. 初始化- 当收到第一个查询时,连接被延迟创建
  2. 验证- 在尝试连接之前验证连接参数
  3. 监控——定期测试连接的有效性
  4. 恢复- 如果连接丢失或超时,则自动重新连接
  5. 清理- 服务器关闭时正确释放资源

MCP 工具接口

服务器向 MCP 客户端公开以下工具:

  • 执行查询- 在 Snowflake 上执行 SQL 查询并返回结果
    • 输入:SQL 查询字符串
    • 输出:结构化格式的查询结果
  • export_to_csv - 在 Snowflake 上执行 SQL 查询并返回结果
    • 输入:SQL 查询字符串
    • 输出:导出的行数。输出文件的文件路径

此实现遵循 MCP 协议实现和 Snowflake 数据库交互的最佳实践。

执照

本项目遵循MIT 许可证。详情请参阅LICENSE文件。

版权所有 (c) 2025 David Amom

-
security - not tested
A
license - permissive license
-
quality - not tested

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

模型上下文协议服务器为任何与 MCP 兼容的客户端提供对 Snowflake 数据库的访问,允许执行具有自动连接管理的 SQL 查询。

  1. 架构概述
    1. 什么是 MCP(模型上下文协议)?
    2. 系统组件
    3. 通信流程
  2. 安装
    1. 配置
      1. MCP 客户端配置示例
      2. 雪花配置
    2. 连接管理
      1. 用法
        1. 标准用法
        2. Docker 使用
      2. 特征
        1. 技术细节
          1. 核心组件
          2. 连接生命周期
          3. MCP 工具接口
        2. 执照

          Related MCP Servers

          • -
            security
            A
            license
            -
            quality
            A Model Context Protocol server that enables Claude to execute SQL queries on Snowflake databases with automatic connection lifecycle management.
            Last updated -
            28
            Python
            MIT License
            • Apple
            • Linux
          • -
            security
            -
            license
            -
            quality
            A Model Context Protocol server that provides tools for connecting to and interacting with various database systems (SQLite, PostgreSQL, MySQL/MariaDB, SQL Server) through a unified interface.
            Last updated -
            Python
          • -
            security
            F
            license
            -
            quality
            A Model Context Protocol server that provides tools for interacting with databases, including PostgreSQL, DuckDB, and Google Cloud Storage Parquet files.
            Last updated -
            2
            TypeScript
            • Linux
            • Apple
          • A
            security
            F
            license
            A
            quality
            A Model Context Protocol server that provides a SQL interface for querying and managing Apache Iceberg tables through Claude desktop, allowing natural language interaction with Iceberg data lakes.
            Last updated -
            1
            2
            Python

          View all related MCP servers

          MCP directory API

          We provide all the information about MCP servers via our MCP API.

          curl -X GET 'https://glama.ai/api/mcp/v1/servers/davidamom/snowflake-mcp'

          If you have feedback or need assistance with the MCP directory API, please join our Discord server