Snowflake数据库服务器

一个实现模型上下文协议(MCP)的服务器,提供与Snowflake数据库的交互功能,支持SQL查询执行、数据洞察收集和模式上下文管理。

  • by isaacwasserman
  • Python
  • 本地部署
  • 184 星标
  • 更新于
在 GitHub 查看 isaacwasserman/mcp-snowflake-server

使用说明

雪花MCP服务器


概述

一种模型上下文协议(MCP)服务器实现,提供与Snowflake的数据库交互。此服务器允许通过工具运行SQL查询,并将数据洞察和模式上下文作为资源公开。


组件

资源

  • memo://insights
    一份不断更新的备忘录,汇总了发现的数据见解。
    通过添加新见解时自动更新 append_insight 工具。

  • context://table/{table_name}
    (如果启用了预取)每个表的架构摘要,包括列和注释,作为单独的资源公开。


工具

服务器公开了以下工具:

查询工具

  • read_query
    执行 SELECT 从数据库读取数据的查询。
    输入:

    • query (string):The SELECT 要执行的SQL查询
      退货: 查询结果为对象数组
  • write_query (仅在以下情况下启用 --allow-write)
    执行 INSERT, UPDATE,或 DELETE 查询。
    输入:

    • query (string):SQL修改查询
      退货: 受影响的行数或确认数
  • create_table (仅在以下情况下启用 --allow-write)
    在数据库中创建新表。
    输入:

    • query (字符串): CREATE TABLE SQL 语句
      退货: 表创建确认

架构工具

  • list_databases
    列出Snowflake实例中的所有数据库。
    退货: 数据库名称数组

  • list_schemas
    列出特定数据库中的所有模式。
    输入:

    • database (string):数据库的名称
      退货: 架构名称数组
  • list_tables
    列出特定数据库和架构中的所有表。
    输入:

    • database (string):数据库的名称
    • schema (string):架构的名称
      退货: 表元数据数组
  • describe_table
    查看特定表的列信息。
    输入:

    • table_name (string):完全限定的表名(database.schema.table)
      退货: 包含名称、类型、可空性、默认值和注释的列定义数组

分析工具

  • append_insight
    向备忘录资源添加新的数据见解。
    输入:
    • insight (string):从分析中发现的数据洞察力
      退货: 确认洞察力添加
      效果: 触发器更新 memo://insights 资源

使用Claude Desktop

通过Smithery安装

通过以下方式自动安装Snowflake Server for Claude Desktop 史密瑟里:

npx -y @smithery/cli install mcp_snowflake_server --client claude

通过UVX安装

传统配置(单个参数)

"mcpServers": {
  "snowflake_pip": {
    "command": "uvx",
    "args": [
      "--python=3.12",  // Optional: specify Python version <=3.12
      "mcp_snowflake_server",
      "--account", "your_account",
      "--warehouse", "your_warehouse",
      "--user", "your_user",
      "--password", "your_password",
      "--role", "your_role",
      "--database", "your_database",
      "--schema", "your_schema"
      // Optionally: "--private_key_path", "your_private_key_absolute_path"
      // Optionally: "--allow_write"
      // Optionally: "--log_dir", "/absolute/path/to/logs"
      // Optionally: "--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
      // Optionally: "--exclude_tools", "{tool_name}", ["{other_tool_name}"]
    ]
  }
}

TOML配置(推荐)

"mcpServers": {
  "snowflake_production": {
    "command": "uvx",
    "args": [
      "--python=3.12",
      "mcp_snowflake_server",
      "--connections-file", "/path/to/snowflake_connections.toml",
      "--connection-name", "production"
      // Optionally: "--allow_write"
      // Optionally: "--log_dir", "/absolute/path/to/logs"
      // Optionally: "--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
      // Optionally: "--exclude_tools", "{tool_name}", ["{other_tool_name}"]
    ]
  },
  "snowflake_staging": {
    "command": "uvx",
    "args": [
      "--python=3.12",
      "mcp_snowflake_server",
      "--connections-file", "/path/to/snowflake_connections.toml",
      "--connection-name", "staging"
    ]
  }
}

本地安装

  1. 安装 Claude AI桌面应用程序

  2. 安装 uv:

curl -LsSf https://astral.sh/uv/install.sh | sh
  1. 创建一个 .env 使用Snowflake凭据创建文件:
SNOWFLAKE_USER="xxx@your_email.com"
SNOWFLAKE_ACCOUNT="xxx"
SNOWFLAKE_ROLE="xxx"
SNOWFLAKE_DATABASE="xxx"
SNOWFLAKE_SCHEMA="xxx"
SNOWFLAKE_WAREHOUSE="xxx"
SNOWFLAKE_PASSWORD="xxx"
SNOWFLAKE_PASSWORD="xxx"
SNOWFLAKE_PRIVATE_KEY_PATH=/absolute/path/key.p8
# Alternatively, use external browser authentication:
# SNOWFLAKE_AUTHENTICATOR="externalbrowser"
  1. [可选]修改 runtime_config.json 为数据库、模式或表设置排除模式。

  2. 本地测试:

uv --directory /absolute/path/to/mcp_snowflake_server run mcp_snowflake_server
  1. 将服务器添加到您的 claude_desktop_config.json:

传统配置(使用环境变量)

"mcpServers": {
  "snowflake_local": {
    "command": "/absolute/path/to/uv",
    "args": [
      "--python=3.12",  // Optional
      "--directory", "/absolute/path/to/mcp_snowflake_server",
      "run", "mcp_snowflake_server"
      // Optionally: "--allow_write"
      // Optionally: "--log_dir", "/absolute/path/to/logs"
      // Optionally: "--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
      // Optionally: "--exclude_tools", "{tool_name}", ["{other_tool_name}"]
    ]
  }
}

TOML配置(推荐)

"mcpServers": {
  "snowflake_local": {
    "command": "/absolute/path/to/uv",
    "args": [
      "--python=3.12",
      "--directory", "/absolute/path/to/mcp_snowflake_server",
      "run", "mcp_snowflake_server",
      "--connections-file", "/absolute/path/to/snowflake_connections.toml",
      "--connection-name", "development"
      // Optionally: "--allow_write"
      // Optionally: "--log_dir", "/absolute/path/to/logs"
      // Optionally: "--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
      // Optionally: "--exclude_tools", "{tool_name}", ["{other_tool_name}"]
    ]
  }
}

备注

  • 默认情况下, 写入操作已禁用。通过以下方式明确启用它们 --allow-write.
  • 服务器支持通过排除模式过滤特定的数据库、模式或表。
  • 如果启用了预取,服务器将公开额外的每表上下文资源。
  • 这 append_insight 工具更新 memo://insights 资源动态。

许可证

麻省理工学院