MCP Server for Snowflake

MCP Server for Snowflake

用于连接 Snowflake 的 MCP 服务器,仅用于只读查询。 (Yòng yú liánjiē Snowflake de MCP fúwùqì, jǐn yòng yú zhǐdú cháxún.) Here's a breakdown of the translation: * **用于 (yòng yú):** Used for, for the purpose of * **连接 (liánjiē):** Connecting, to connect * **Snowflake:** Snowflake (the same in Chinese) * **的 (de):** A possessive particle, like "of" * **MCP 服务器 (MCP fúwùqì):** MCP Server * **仅用于 (jǐn yòng yú):** Only used for, exclusively for * **只读 (zhǐdú):** Read-only * **查询 (cháxún):** Queries, to query

dynamike

研究与数据
访问服务器

README

用于 Snowflake 的 MCP 服务器

一个用于对 Snowflake 数据库执行只读操作的模型上下文协议 (MCP) 服务器。此工具使 Claude 能够安全地查询 Snowflake 数据,而无需修改任何信息。

功能

  • 使用以下任一方式灵活地对 Snowflake 进行身份验证:
    • 使用私钥的服务帐户身份验证
    • 用于交互式会话的外部浏览器身份验证
  • 具有自动后台刷新的连接池,以保持持久连接
  • 支持在单个会话中查询多个视图和数据库
  • 支持多种 SQL 语句类型(SELECT、SHOW、DESCRIBE、EXPLAIN、WITH)
  • 用于查询 Snowflake 数据的 MCP 兼容处理程序
  • 具有安全检查的只读操作,以防止数据修改
  • 支持 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/mcp-server-snowflake.git
    cd mcp-server-snowflake
    
  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 的 MCP 服务器,该服务器可以连接到 Claude Desktop 或任何支持 stdio 通信的 MCP 客户端。

使用外部浏览器身份验证时,将自动打开一个浏览器窗口,提示您登录到您的 Snowflake 帐户。

Claude Desktop 集成

  1. 在 Claude Desktop 中,转到 Settings → MCP Servers
  2. 添加一个新服务器,其中包含您的 uv 可执行文件的完整路径:
    "snowflake-mcp-server": {
       "command": "uv",
       "args": [
          "--directory",
          "/<代码路径>/mcp-server-snowflake",
          "run",
          "snowflake-mcp"
       ]
    }
    
  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 配置:

# 设置连接每 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。

技术细节

本项目使用:

推荐服务器

Crypto Price & Market Analysis MCP Server

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。

本地
Python