返回市场
mcp服务器雪花算法

mcp服务器雪花算法

作者:dynamike9 星标更新:2025-04-29

项目介绍

针对Snowflake的MCP服务器

这是一个用于执行只读操作的Model Context Protocol (MCP)服务器,针对Snowflake数据库。此工具使Claude能够安全地查询Snowflake数据而不修改任何信息。

特性

  • 使用以下任一方式灵活认证到Snowflake:
    • 使用私钥的服务账户认证
    • 用于交互会话的外部浏览器认证
  • 带有自动后台刷新的连接池以维持持久连接
  • 支持在一个会话中查询多个视图和数据库
  • 支持多种SQL语句类型(SELECT, SHOW, DESCRIBE, EXPLAIN, WITH)
  • 与MCP兼容的处理程序,用于查询Snowflake数据
  • 带有安全检查的只读操作,防止数据修改
  • 支持Python 3.12+
  • 基于Stdio的MCP服务器,便于与Claude Desktop集成

可用工具

该服务器提供了以下工具用于查询Snowflake:

  • list_databases:列出所有可访问的Snowflake数据库
  • list_views:列出指定数据库和模式中的所有视图
  • describe_view:获取特定视图的详细信息,包括列和SQL定义
  • query_view:从视图中查询数据,可选行数限制
  • execute_query:执行自定义的只读SQL查询(SELECT, SHOW, DESCRIBE, EXPLAIN, WITH),结果格式化为markdown表格

安装

先决条件

  • Python 3.12或更高版本
  • 一个Snowflake账户,具有以下之一:
    • 配置好的服务账户(用户名+私钥),或者
    • 用于基于浏览器认证的常规用户账户
  • uv包管理器(推荐)

步骤

  1. 克隆此仓库:

    git clone https://github.com/yourusername/snowflake-mcp-server.git
    cd snowflake-mcp-server
    
  2. 安装包:

    uv pip install -e .
    
  3. 创建包含您的Snowflake凭证的.env文件:

    根据您首选的身份验证方法选择提供的示例文件之一:

    对于私钥身份验证

    cp .env.private_key.example .env
    

    然后编辑.env文件以设置您的Snowflake账户详情和私钥路径。

    对于外部浏览器身份验证

    cp .env.browser.example .env
    

    然后编辑.env文件以设置您的Snowflake账户详情。

使用

使用uv运行

安装包后,您可以直接运行服务器:

uv run snowflake-mcp

# 或者明确使用stdio传输
uv run snowflake-mcp-stdio

这将启动基于stdio的MCP服务器,可以连接到Claude Desktop或其他支持stdio通信的MCP客户端。

当使用外部浏览器认证时,会自动打开浏览器窗口提示您登录到Snowflake账户。

Claude Desktop集成

  1. 在Claude Desktop中,转到设置 → MCP服务器

  2. 添加一个新的服务器,使用您的uv可执行文件的完整路径:

    "snowflake-mcp-server": {
       "command": "uv",
       "args": [
          "--directory",
          "/<代码路径>/snowflake-mcp-server",
          "run",
          "snowflake-mcp"
       ]
    }
    

    或者明确指定stdio传输:

    "snowflake-mcp-server": {
       "command": "uv",
       "args": [
          "--directory",
          "/<代码路径>/snowflake-mcp-server",
          "run",
          "snowflake-mcp-stdio"
       ]
    }
    
  3. 您可以通过在终端中运行which uv找到您的uv路径

  4. 保存服务器配置

示例查询

与Claude一起使用时,您可以提出如下问题:

  • "你能列出我Snowflake账户中的所有数据库吗?"
  • "列出MARKETING数据库中的所有视图"
  • "描述SALES数据库中CUSTOMER_ANALYTICS视图的结构"
  • "展示FINANCE数据库中REVENUE_BY_REGION视图的样本数据"
  • "运行这个SQL查询:SELECT customer_id, SUM(order_total) as total_spend FROM SALES.ORDERS GROUP BY customer_id ORDER BY total_spend DESC LIMIT 10"
  • "查询市场营销数据库,找出按转化率计算的前5个表现最佳的活动"
  • "通过查询SALES.CUSTOMER_METRICS和MARKETING.CAMPAIGN_RESULTS来比较不同数据库中的视图数据"

配置

连接池行为可通过环境变量进行配置:

  • SNOWFLAKE_CONN_REFRESH_HOURS:连接刷新之间的间隔时间(小时,默认值:8)

示例.env配置:

# 设置连接每4小时刷新一次
SNOWFLAKE_CONN_REFRESH_HOURS=4

身份验证方法

私钥身份验证

此方法使用服务账户和私钥进行非交互式认证,适用于自动化流程。

  1. 按照Snowflake文档为您的Snowflake用户创建密钥对
  2. 在您的.env文件中设置SNOWFLAKE_AUTH_TYPE=private_key
  3. SNOWFLAKE_PRIVATE_KEY_PATH中提供您的私钥路径

外部浏览器身份验证

此方法打开浏览器窗口进行交互式认证。

  1. 在您的.env文件中设置SNOWFLAKE_AUTH_TYPE=external_browser
  2. 启动服务器时,会自动打开浏览器窗口要求您登录
  3. 认证后,会话将保持活跃状态,持续时间为您的Snowflake账户设置所指定的时间

安全注意事项

此服务器:

  • 强制执行只读操作(仅允许SELECT, SHOW, DESCRIBE, EXPLAIN和WITH语句)
  • 自动添加LIMIT子句以防止大量结果集
  • 使用安全的身份验证方法连接到Snowflake
  • 验证输入以防止SQL注入

⚠️ 重要:确保您的.env文件安全,并且不要将其提交到版本控制。.gitignore文件已配置排除它。

开发

静态类型检查

mypy mcp_server_snowflake/

代码检查

ruff check .

代码格式化

ruff format .

运行测试

pytest

贡献

欢迎贡献!请随时提交Pull Request。

技术细节

本项目使用了: