关于 Mcp Snowflake Server Nsp
Mcp Snowflake Server Nsp 将 Snowflake 的 SQL 查询、结构浏览和数据洞察能力提供给 AI 助手。它支持多种认证方式,并可通过配置保护写操作。
主要功能
- 01执行 SELECT 查询及可选写操作
- 02浏览数据库、架构和表结构
- 03密码、密钥对、浏览器及 OAuth 认证
- 04TOML 文件管理多环境连接
- 05预加载表结构为 MCP 资源
- 06配置排除对象及工具
适用场景
- 01通过 AI 助手查询 Snowflake 数据
- 02检查数据库、架构和表的结构
- 03用配置文件切换生产与开发连接
- 04限制写入操作或隐藏指定对象
MCP 相关
该 MCP 服务向客户端提供 Snowflake 查询、结构浏览和分析工具,并可将洞察及预加载表结构作为资源提供。写入工具默认关闭。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx mcp-snowflake-server-nspSNOWFLAKE_ACCOUNTSnowflake account identifierSNOWFLAKE_USERSnowflake usernameSNOWFLAKE_PASSWORD密钥Password (not required for key-pair / SSO)SNOWFLAKE_WAREHOUSEVirtual warehouse to useSNOWFLAKE_DATABASEDefault databaseSNOWFLAKE_SCHEMADefault schemaSNOWFLAKE_ROLERole to assumeSNOWFLAKE_AUTHENTICATOR密钥Authentication method. Defaults to 'snowflake' if not set. Valid values: snowflake, externalbrowser, snowflake_jwt, oauth, oauth_client_credentialsSNOWFLAKE_PRIVATE_KEY_FILE密钥Absolute path to .p8 private key fileSNOWFLAKE_PRIVATE_KEY_FILE_PWD密钥Passphrase for encrypted private keySNOWFLAKE_OAUTH_CLIENT_ID密钥OAuth 2.0 client ID (required for oauth_client_credentials authenticator)SNOWFLAKE_OAUTH_CLIENT_SECRET密钥OAuth 2.0 client secret (required for oauth_client_credentials authenticator)SNOWFLAKE_OAUTH_TOKEN_REQUEST_URL密钥OAuth 2.0 token endpoint URL (required for oauth_client_credentials authenticator)SNOWFLAKE_OAUTH_SCOPE密钥OAuth 2.0 scope (optional, e.g. session:role:MY_ROLE)SNOWFLAKE_TOKEN密钥Pre-fetched OAuth bearer token (required for oauth authenticator)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Snowflake MCP 服务 NSP
一个 模型上下文协议(MCP) 服务 / MCP 服务,可将 AI 助手连接到 Snowflake — 让你可以直接通过大模型客户端运行 SQL 查询、探索架构并获取数据洞察。
亮点:
- 多种身份验证方式:密码、密钥对、外部浏览器、OAuth 2.0(客户端凭据和 Bearer 令牌)、TOML 连接文件
- TOML 多连接配置 — 在一个文件中管理
production、staging和development环境 - 写入安全防护 — 默认禁用写入操作,必须显式启用
- 排除模式 — 从发现结果中过滤数据库、架构或表
--exclude-json-results标志 — 减少大模型上下文窗口的使用- 使用
--exclude_tools选择性排除工具 - 预取模式 — 将表架构预加载为 MCP 资源
- 支持 Docker,并提供经过强化的映像(DHI、非 root 用户、运行时不含 shell)
目录
快速开始
最快的试用方式 — 使用 uvx 和 TOML 连接文件:
# 1. Create a connections file
cat > ~/snowflake_connections.toml << 'EOF'
[myconn]
account = "your_account"
user = "your_user"
password = "your_password"
warehouse = "COMPUTE_WH"
database = "MY_DB"
schema = "PUBLIC"
role = "MYROLE"
EOF
# 2. Run the server
uvx --python=3.13 --from mcp-snowflake-server-nsp mcp_snowflake_server \
--connections-file ~/snowflake_connections.toml \
--connection-name myconn
Claude Code
使用 snowflake_connections.toml 添加到 MCP 客户端配置中(例如 claude_desktop_config.json):
"mcpServers": {
"snowflake": {
"command": "uvx",
"args": [
"--python=3.13",
"--from", "mcp-snowflake-server-nsp",
"mcp_snowflake_server",
"--connections-file", "/absolute/path/to/snowflake_connections.toml",
"--connection-name", "myconn"
]
}
}
Visual Studio Code(VSCode)
或者使用 .env 文件手动添加到 MCP 客户端配置中(例如 .vscode/mcp.json;参见身份验证):
"snowflake": {
// Snowflake MCP server
"type": "stdio",
"command": "uvx",
"args": [
"--from", "mcp-snowflake-server-nsp",
"--python=3.13",
"mcp_snowflake_server"
],
"envFile": "${workspaceFolder}/.env"
}
OpenCode
使用 .env 文件添加到 MCP 客户端配置中(例如 opencode.jsonc;参见身份验证):
"snowflake": {
"type": "local",
"command": [
"uvx",
"--from",
"mcp-snowflake-server-nsp",
"--python=3.13",
"mcp_snowflake_server",
],
"enabled": true,
"timeout": 300000,
}
组件
资源
| URI | 描述 |
|---|---|
memo://insights | 持续更新的备忘录,用于汇总通过 append_insight 追加的数据洞察。 |
context://table/{table_name} | (仅预取模式) 每个表的架构摘要,包括列和注释。 |
工具
查询工具
| 工具 | 描述 | 要求 |
|---|---|---|
read_query | 执行 SELECT 查询。输入: query(字符串)。 | — |
write_query | 执行 INSERT、UPDATE 或 DELETE 查询。输入: query(字符串)。 | --allow_write |
create_table | 执行 CREATE TABLE 语句。输入: query(字符串)。 | --allow_write |
架构工具
| 工具 | 描述 | 输入 |
|---|---|---|
list_databases | 列出 Snowflake 实例中的所有数据库。 | — |
list_schemas | 列出数据库中的所有架构。 | database(字符串) |
list_tables | 列出数据库和架构中的所有表。 | database、schema(字符串) |
describe_table | 描述表的列(名称、类型、是否允许为空、默认值、注释)。 | table_name,格式为 database.schema.table |
分析工具
| 工具 | 描述 | 输入 |
|---|---|---|
append_insight | 向 memo://insights 资源添加数据洞察。 | insight(字符串) |
身份验证
密码
通过环境变量或 CLI 标志设置凭据(参见配置参考):
SNOWFLAKE_USER="[email protected]"
SNOWFLAKE_ACCOUNT="myaccount"
SNOWFLAKE_AUTHENTICATOR="snowflake"
SNOWFLAKE_PASSWORD="secret"
SNOWFLAKE_WAREHOUSE="COMPUTE_WH"
SNOWFLAKE_DATABASE="MY_DB"
SNOWFLAKE_SCHEMA="PUBLIC"
SNOWFLAKE_ROLE="MYROLE"
密钥对
支持 RSA(RS256)和 ECDSA(ES256、ES384、ES512)私钥(ECDSA 需要 snowflake-connector-python ≥ 4.5.0)。
SNOWFLAKE_USER="[email protected]"
SNOWFLAKE_ACCOUNT="myaccount"
SNOWFLAKE_AUTHENTICATOR="snowflake_jwt"
SNOWFLAKE_PRIVATE_KEY_FILE="/absolute/path/to/key.p8"
SNOWFLAKE_PRIVATE_KEY_FILE_PWD="passphrase" # Optional — only if key is encrypted
SNOWFLAKE_WAREHOUSE="COMPUTE_WH"
SNOWFLAKE_DATABASE="MY_DB"
SNOWFLAKE_SCHEMA="PUBLIC"
SNOWFLAKE_ROLE="MYROLE"
也可以通过 CLI:--private_key_file /path/to/key.p8 --private_key_file_pwd passphrase
外部浏览器
SNOWFLAKE_AUTHENTICATOR="externalbrowser"
也可以在 TOML 连接条目中设置:authenticator = "externalbrowser"
OAuth 2.0 客户端凭据
使用 OAuth 2.0 客户端凭据流程,通过客户端 ID 和密钥进行身份验证(无需用户交互):
SNOWFLAKE_AUTHENTICATOR="oauth_client_credentials"
SNOWFLAKE_ACCOUNT="myaccount"
SNOWFLAKE_OAUTH_CLIENT_ID="your_client_id"
SNOWFLAKE_OAUTH_CLIENT_SECRET="your_client_secret"
SNOWFLAKE_OAUTH_TOKEN_REQUEST_URL="https://your-idp.example.com/oauth/token"
SNOWFLAKE_OAUTH_SCOPE="session:role:MY_ROLE" # Optional
SNOWFLAKE_WAREHOUSE="COMPUTE_WH"
SNOWFLAKE_DATABASE="MY_DB"
SNOWFLAKE_SCHEMA="PUBLIC"
SNOWFLAKE_ROLE="MYROLE"
OAuth Bearer 令牌
使用预先获取的 OAuth Bearer 令牌:
SNOWFLAKE_AUTHENTICATOR="oauth"
SNOWFLAKE_ACCOUNT="myaccount"
SNOWFLAKE_TOKEN="eyJhbGciOiJSUzI1NiJ9..."
SNOWFLAKE_WAREHOUSE="COMPUTE_WH"
SNOWFLAKE_DATABASE="MY_DB"
SNOWFLAKE_SCHEMA="PUBLIC"
SNOWFLAKE_ROLE="MYROLE"
TOML 连接文件(推荐)
在单个文件中管理多个环境。完整模板请参见 example_connections.toml。
[production]
account = "your_account"
user = "your_user"
password = "your_password"
authenticator = "snowflake"
warehouse = "COMPUTE_WH"
database = "PROD_DB"
schema = "PUBLIC"
role = "ACCOUNTADMIN"
[development]
account = "your_account"
user = "dev_user"
authenticator = "externalbrowser"
warehouse = "DEV_WH"
database = "DEV_DB"
schema = "PUBLIC"
role = "DEVELOPER"
[reporting]
account = "your_account"
user = "reporting_user"
authenticator = "snowflake_jwt"
private_key_file = "/path/to/private_key.pem"
private_key_file_pwd = "passphrase" # Optional
warehouse = "REPORTING_WH"
database = "REPORTING_DB"
schema = "REPORTS"
role = "REPORTING_ROLE"
[analytics_oauth]
account = "your_account"
authenticator = "oauth_client_credentials"
oauth_client_id = "your_client_id"
oauth_client_secret = "your_client_secret"
oauth_token_request_url = "https://your-idp.example.com/oauth/token"
oauth_scope = "session:role:ANALYTICS_ROLE" # Optional
warehouse = "ANALYTICS_WH"
database = "ANALYTICS_DB"
schema = "PUBLIC"
role = "ANALYTICS_ROLE"
使用 --connections-file 传入文件,并使用 --connection-name 选择配置文件。必须同时指定这两个标志。
安装
此软件包已发布在 PyPI,名称为 mcp-snowflake-server-nsp。
参与贡献或从源代码运行? 请参见
CONTRIBUTING.md,了解本地开发环境设置、测试命令、代码格式化,以及如何从源代码构建 Docker 镜像。
通过 UVX
TOML 配置(推荐)
"mcpServers": {
"snowflake_production": {
"command": "uvx",
"args": [
"--python=3.13",
"--from", "mcp-snowflake-server-nsp",
"mcp_snowflake_server",
"--connections-file", "/path/to/snowflake_connections.toml",
"--connection-name", "production"
// Optional flags — see Configuration Reference
]
},
"snowflake_staging": {
"command": "uvx",
"args": [
"--python=3.13",
"--from", "mcp-snowflake-server-nsp",
"mcp_snowflake_server",
"--connections-file", "/path/to/snowflake_connections.toml",
"--connection-name", "staging"
]
}
}
单独参数
"mcpServers": {
"snowflake": {
"command": "uvx",
"args": [
"--python=3.13",
"--from", "mcp-snowflake-server-nsp",
"mcp_snowflake_server",
"--account", "your_account",
"--warehouse", "your_warehouse",
"--user", "your_user",
"--password", "your_password",
"--role", "your_role",
"--database", "your_database",
"--schema", "your_schema"
// Optional: "--private_key_file", "/absolute/path/key.p8"
// Optional: "--private_key_file_pwd", "passphrase"
// Optional flags — see Configuration Reference
]
}
}
通过 Docker Hub
此镜像已发布在 Docker Hub——无需构建:
docker pull nsphung/mcp-snowflake-server-nsp
注意:
-i(--interactive)是保持 stdin 打开以供 MCP stdio 传输使用所必需的。不要使用-d(分离模式)。
Claude Desktop — claude_desktop_config.json
使用 .env 文件(参见身份验证):
"mcpServers": {
"snowflake": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"--env-file", "/absolute/path/to/.env",
"nsphung/mcp-snowflake-server-nsp"
]
}
}
使用 TOML 连接文件:
"mcpServers": {
"snowflake": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/path/to/snowflake_connections.toml:/app/snowflake_connections.toml:ro",
"nsphung/mcp-snowflake-server-nsp",
"--connections-file", "/app/snowflake_connections.toml",
"--connection-name", "production"
]
}
}
VS Code — .vscode/mcp.json
使用 .env 文件:
"snowflake": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"nsphung/mcp-snowflake-server-nsp"
],
"envFile": "${workspaceFolder}/.env"
}
使用 TOML 连接文件:
"snowflake": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/path/to/snowflake_connections.toml:/app/snowflake_connections.toml:ro",
"nsphung/mcp-snowflake-server-nsp",
"--connections-file", "/app/snowflake_connections.toml",
"--connection-name", "production"
]
}
OpenCode — opencode.jsonc
"snowflake": {
"type": "local",
"command": [
"docker", "run", "--rm", "-i",
"--env-file", "/absolute/path/to/.env",
"nsphung/mcp-snowflake-server-nsp"
],
"enabled": true,
"timeout": 300000
}
配置参考
所有连接参数也可以设置为环境变量(SNOWFLAKE_<PARAM_UPPER>)。
| 标志 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
--account | SNOWFLAKE_ACCOUNT | — | Snowflake 账户标识符 |
--user | SNOWFLAKE_USER | — | Snowflake 用户名 |
--password | SNOWFLAKE_PASSWORD | — | 密码(密钥对 / SSO 无需提供) |
--warehouse | SNOWFLAKE_WAREHOUSE | — | 要使用的虚拟仓库 |
--database | SNOWFLAKE_DATABASE | (必填) | 默认数据库 |
--schema | SNOWFLAKE_SCHEMA | (必填) | 默认架构 |
--role | SNOWFLAKE_ROLE | — | 要使用的角色 |
--private_key_file | SNOWFLAKE_PRIVATE_KEY_FILE | — | RSA 或 ECDSA(ES256/384/512)私钥文件的绝对路径(.p8 / .pem) |
--private_key_file_pwd | SNOWFLAKE_PRIVATE_KEY_FILE_PWD | — | 加密私钥的密码短语 |
--connections-file | — | — | TOML 连接文件的路径 |
--connection-name | — | — | TOML 文件中的连接配置名称(与 --connections-file 一起使用时必填) |
--allow_write | — | false | 启用 write_query 和 create_table 工具 |
--prefetch / --no-prefetch | — | false | 预加载表架构为 context://table/* 资源(禁用 list_tables / describe_table) |
--exclude_tools | — | [] | 要禁用的工具名称列表,以空格分隔 |
--exclude-json-results | — | false | 从响应中省略内嵌 JSON 资源(减少上下文窗口用量) |
--log_dir | — | — | 日志文件输出目录 |
--log_level | — | INFO | 日志详细程度:DEBUG、INFO、WARNING、ERROR、CRITICAL |
排除模式
编辑 runtime_config.json,即可从所有发现工具中排除数据库、架构或表。模式会以不区分大小写的方式进行子字符串匹配。
{
"exclude_patterns": {
"databases": ["temp"],
"schemas": ["temp", "information_schema"],
"tables": ["temp"]
}
}
服务会在启动时从工作目录自动加载此文件。
许可证
本项目采用 MIT License 许可。完整文本请参阅 LICENSE 文件。
分叉与署名
此仓库是 isaacwasserman/mcp-snowflake-server 的分叉。
- 上游作者和贡献者保留其贡献内容的版权。
- 分叉版本的专属更改由
nsphung维护。 - 显著修改的摘要记录在
NOTICE中。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
