mcpField
M
MCP Server for Snowflake

MCP Server for Snowflake

本地服务
github.com/dynamike数据库1478 周前更新

关于 MCP Server for Snowflake

面向 MCP 客户端的 Snowflake 只读查询服务,支持多种身份验证、数据库与视图发现,以及受限制的 SQL 查询。

主要功能

  1. 01私钥与浏览器身份验证
  2. 02列出数据库和视图
  3. 03查看视图结构与定义
  4. 04执行校验后的只读 SQL
  5. 05连接池与定期刷新

适用场景

  1. 01浏览数据库和视图
  2. 02查询前检查视图
  3. 03跨 Snowflake 视图提问
  4. 04执行受限的只读 SQL 查询

MCP 相关

将 Snowflake 数据库和视图操作作为 MCP 工具提供,包括元数据查询和只读 SQL 查询。通过 stdio 与 MCP 客户端通信。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Snowflake MCP 服务

一个用于对 Snowflake 数据库执行只读操作的模型上下文协议(MCP)服务。此工具可让 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. 创建 .env 文件并填入 Snowflake 凭据:

    根据你偏好的身份验证方式,选择一个提供的示例文件:

    使用私钥进行身份验证:

    cp .env.private_key.example .env
    

    然后编辑 .env 文件,设置 Snowflake 账户详细信息和私钥路径。

    使用外部浏览器进行身份验证:

    cp .env.browser.example .env
    

    然后编辑 .env 文件,设置 Snowflake 账户详细信息。

使用方法

使用 uv 运行

安装软件包后,可以直接运行服务:

uv run snowflake-mcp

# Or you can be explicit about using stdio transport
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",
          "/<path-to-code>/snowflake-mcp-server",
          "run",
          "snowflake-mcp"
       ]
    }
    

    或明确指定 Stdio 传输方式:

    "snowflake-mcp-server": {
       "command": "uv",
       "args": [
          "--directory",
          "/<path-to-code>/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”
  • “查询 MARKETING 数据库,找出转化率最高的 5 个营销活动”
  • “通过查询 SALES.CUSTOMER_METRICS 和 MARKETING.CAMPAIGN_RESULTS,对比不同数据库中的视图数据”
配置

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

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

.env 配置示例:

# Set connection to refresh every 4 hours
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。

技术详情

此项目使用:

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。