Snowflake MCP 服务器
概述
一个 Model Context Protocol (MCP) 服务器实现,提供与 Snowflake 数据库的交互。该服务器支持通过工具运行 SQL 查询,并将数据洞察和模式上下文作为资源公开。
组件
资源
-
memo://insights
一个持续更新的备忘录,聚合已发现的数据洞察。
当通过append_insight工具追加新洞察时自动更新。 -
context://table/{table_name}
(如果启用预取)每个表的模式摘要,包括列和注释,作为独立资源公开。
工具
服务器公开以下工具:
查询工具
-
read_query
执行SELECT查询从数据库读取数据。
输入:query(string): 要执行的SELECTSQL 查询
返回: 作为对象数组的查询结果
-
write_query(仅当使用--allow-write时启用)
执行INSERT、UPDATE或DELETE查询。
输入:query(string): SQL 修改查询
返回: 影响的行数或确认信息
-
create_table(仅当使用--allow-write时启用)
在数据库中创建新表。
输入:query(string):CREATE TABLESQL 语句
返回: 表创建确认信息
模式工具
-
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 安装
要自动通过 Smithery 安装 Snowflake 服务器用于 Claude Desktop:
npx -y @smithery/cli install mcp_snowflake_server --client claude
通过 UVX 安装
"mcpServers": {
"snowflake_pip": {
"command": "uvx",
"args": [
"--python=3.12", // 可选:指定 Python 版本 <=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"
// 可选:"--allow_write"
// 可选:"--log_dir", "/绝对路径/to/logs"
// 可选:"--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
// 可选:"--exclude_tools", "{tool_name}", ["{other_tool_name}"]
]
}
}
本地安装
-
安装
uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
- 创建一个
.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_AUTHENTICATOR="externalbrowser"
-
[可选] 修改
runtime_config.json以设置数据库、模式或表的排除模式。 -
本地测试:
uv --directory /绝对路径/to/mcp_snowflake_server run mcp_snowflake_server
- 将服务器添加到您的
claude_desktop_config.json:
"mcpServers": {
"snowflake_local": {
"command": "/绝对路径/to/uv",
"args": [
"--python=3.12", // 可选
"--directory", "/绝对路径/to/mcp_snowflake_server",
"run", "mcp_snowflake_server"
// 可选:"--allow_write"
// 可选:"--log_dir", "/绝对路径/to/logs"
// 可选:"--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
// 可选:"--exclude_tools", "{tool_name}", ["{other_tool_name}"]
]
}
}
注意事项
- 默认情况下,写操作被禁用。显式使用
--allow-write启用它们。 - 服务器支持通过排除模式过滤特定数据库、模式或表。
- 如果启用预取,服务器会公开额外的每个表的上下文资源。
append_insight工具动态更新memo://insights资源。
许可证
MIT
