mcpField
M
Mcp Snowflake Server Nsp

Mcp Snowflake Server Nsp

本地服务
github.com/nsphung数据库22 天前更新

关于 Mcp Snowflake Server Nsp

Mcp Snowflake Server Nsp 将 Snowflake 的 SQL 查询、结构浏览和数据洞察能力提供给 AI 助手。它支持多种认证方式,并可通过配置保护写操作。

主要功能

  1. 01执行 SELECT 查询及可选写操作
  2. 02浏览数据库、架构和表结构
  3. 03密码、密钥对、浏览器及 OAuth 认证
  4. 04TOML 文件管理多环境连接
  5. 05预加载表结构为 MCP 资源
  6. 06配置排除对象及工具

适用场景

  1. 01通过 AI 助手查询 Snowflake 数据
  2. 02检查数据库、架构和表的结构
  3. 03用配置文件切换生产与开发连接
  4. 04限制写入操作或隐藏指定对象

MCP 相关

该 MCP 服务向客户端提供 Snowflake 查询、结构浏览和分析工具,并可将洞察及预加载表结构作为资源提供。写入工具默认关闭。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"snowflake-server-nsphung": {
"command": "uvx",
"args": [
"mcp-snowflake-server-nsp"
],
"env": {
"SNOWFLAKE_ACCOUNT": "<SNOWFLAKE_ACCOUNT>",
"SNOWFLAKE_USER": "<SNOWFLAKE_USER>",
"SNOWFLAKE_PASSWORD": "<SNOWFLAKE_PASSWORD>",
"SNOWFLAKE_WAREHOUSE": "<SNOWFLAKE_WAREHOUSE>",
"SNOWFLAKE_DATABASE": "<SNOWFLAKE_DATABASE>",
"SNOWFLAKE_SCHEMA": "<SNOWFLAKE_SCHEMA>",
"SNOWFLAKE_ROLE": "<SNOWFLAKE_ROLE>",
"SNOWFLAKE_AUTHENTICATOR": "<SNOWFLAKE_AUTHENTICATOR>",
"SNOWFLAKE_PRIVATE_KEY_FILE": "<SNOWFLAKE_PRIVATE_KEY_FILE>",
"SNOWFLAKE_PRIVATE_KEY_FILE_PWD": "<SNOWFLAKE_PRIVATE_KEY_FILE_PWD>",
"SNOWFLAKE_OAUTH_CLIENT_ID": "<SNOWFLAKE_OAUTH_CLIENT_ID>",
"SNOWFLAKE_OAUTH_CLIENT_SECRET": "<SNOWFLAKE_OAUTH_CLIENT_SECRET>",
"SNOWFLAKE_OAUTH_TOKEN_REQUEST_URL": "<SNOWFLAKE_OAUTH_TOKEN_REQUEST_URL>",
"SNOWFLAKE_OAUTH_SCOPE": "<SNOWFLAKE_OAUTH_SCOPE>",
"SNOWFLAKE_TOKEN": "<SNOWFLAKE_TOKEN>"
}
}
}
}
启动命令uvx mcp-snowflake-server-nsp
需要配置的环境变量
SNOWFLAKE_ACCOUNTSnowflake account identifier
SNOWFLAKE_USERSnowflake username
SNOWFLAKE_PASSWORD密钥Password (not required for key-pair / SSO)
SNOWFLAKE_WAREHOUSEVirtual warehouse to use
SNOWFLAKE_DATABASEDefault database
SNOWFLAKE_SCHEMADefault schema
SNOWFLAKE_ROLERole to assume
SNOWFLAKE_AUTHENTICATOR密钥Authentication method. Defaults to 'snowflake' if not set. Valid values: snowflake, externalbrowser, snowflake_jwt, oauth, oauth_client_credentials
SNOWFLAKE_PRIVATE_KEY_FILE密钥Absolute path to .p8 private key file
SNOWFLAKE_PRIVATE_KEY_FILE_PWD密钥Passphrase for encrypted private key
SNOWFLAKE_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-snowflake-server-nsp0.14.4
ocidocker.io/nsphung/mcp-snowflake-server-nsp:0.14.4

工具

还没有获取到工具列表

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

详细介绍

mcp-snowflake-server-nsp-banner

PyPI • codecov • PyPI Downloads • Docker Pulls • License: MIT

Testtest codecov Docker Image Check
Lintlint Ruff Checked with mypy prek oxfmt
MetaCode of Conduct MCP Compatible made-with-python python-3.13+
SecurityCodeRabbit Pull Request Reviews CodeQL OpenSSF Scorecard Socket Badge
Best PracticesOpenSSF Best Practices OpenSSF Baseline
DocumentationAsk DeepWiki

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)

uvx — 在 VS Code 中安装 在 VS Code Insiders 中安装

Docker — 在 VS Code 中安装(Docker) 在 VS Code Insiders 中安装(Docker)

或者使用 .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>)。

标志环境变量默认值说明
--accountSNOWFLAKE_ACCOUNT—Snowflake 账户标识符
--userSNOWFLAKE_USER—Snowflake 用户名
--passwordSNOWFLAKE_PASSWORD—密码(密钥对 / SSO 无需提供)
--warehouseSNOWFLAKE_WAREHOUSE—要使用的虚拟仓库
--databaseSNOWFLAKE_DATABASE(必填)默认数据库
--schemaSNOWFLAKE_SCHEMA(必填)默认架构
--roleSNOWFLAKE_ROLE—要使用的角色
--private_key_fileSNOWFLAKE_PRIVATE_KEY_FILE—RSA 或 ECDSA(ES256/384/512)私钥文件的绝对路径(.p8 / .pem)
--private_key_file_pwdSNOWFLAKE_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 的分叉。

MseeP.ai 安全评估徽章

  • 上游作者和贡献者保留其贡献内容的版权。
  • 分叉版本的专属更改由 nsphung 维护。
  • 显著修改的摘要记录在 NOTICE 中。

评论

支持 Markdown

第一次接触 MCP?

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

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