Snowflake读取器MCP服务器

一个面向企业的只读模型上下文协议(MCP)服务器,用于向MCP兼容代理(如Claude Desktop)暴露Snowflake数据,确保凭证不进入日志,验证SQL使用,并准备在基于Docker的MCP托管环境中运行。

  • by DuckCode-MCP-Servers
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 DuckCode-MCP-Servers/duckcode-snowflake-readonly-mcp-server

使用说明

Duckcode 雪花阅读器 MCP 服务器

一个面向企业、仅读取的模型上下文协议(MCP)服务器,用于暴露(或提供访问) 将Snowflake数据传输到兼容MCP的代理程序,如Claude Desktop。服务器持续保持 从日志中提取凭据,验证SQL使用情况,并准备好在基于Docker的环境中运行 MCP托管环境。

亮点

  • 通过SQL防护和标识符验证强制实施只读访问
  • 多个凭证来源:JSON 密钥文件、环境变量或内联 JSON
  • 最小运行时表面面积:单个Python进程,无后台线程
  • 即插即用的MCP服务器标识符 duckcode-snowflake-reader

安全配置选项

快速凭证示例

  • 秘密文件创建 /run/secrets/snowflake.json 使用以下所示的JSON有效载荷并启动 python -m duckcode_snowflake_reader_mcp_server.main --connection-file /run/secrets/snowflake.json。
  • 环境变量出口 DUCKCODE_SNOWFLAKE_ACCOUNT=my-account, DUCKCODE_SNOWFLAKE_USER=svc_reader等,然后运行 python -m duckcode_snowflake_reader_mcp_server.main --env-prefix DUCKCODE_SNOWFLAKE。
  • 内联JSON(仅用于测试): python -m duckcode_snowflake_reader_mcp_server.main --connection '{"account":"my-account","user":"svc_reader","password":"super-secret","warehouse":"reporting_wh","database":"analytics_db","schema":"production","role":"ANALYST_ROLE"}'。

选项1 - JSON密钥文件(推荐)

将凭据存储在一个文件中,该文件 不是 致力于源代码控制。示例 snowflake-credentials.json:

{
  "account": "your-account",
  "user": "svc_reader",
  "password": "${SNOWFLAKE_PASSWORD}",
  "warehouse": "reporting_wh",
  "database": "analytics_db",
  "schema": "production",
  "role": "ANALYST_ROLE"
}

运行服务器:

python -m duckcode_snowflake_reader_mcp_server.main \
  --connection-file /secure/path/snowflake-credentials.json

选项2 - 环境变量

通过环境前缀提供值。每个键都变成 <PREFIX>_<field name in uppercase> (例如。 DUCKCODE_SNOWFLAKE_ACCOUNT)。

export DUCKCODE_SNOWFLAKE_ACCOUNT=your-account
export DUCKCODE_SNOWFLAKE_USER=svc_reader
export DUCKCODE_SNOWFLAKE_PASSWORD='...'
export DUCKCODE_SNOWFLAKE_WAREHOUSE=reporting_wh
export DUCKCODE_SNOWFLAKE_DATABASE=analytics_db
export DUCKCODE_SNOWFLAKE_SCHEMA=production
export DUCKCODE_SNOWFLAKE_ROLE=ANALYST_ROLE

python -m duckcode_snowflake_reader_mcp_server.main --env-prefix DUCKCODE_SNOWFLAKE

环境来源的值会覆盖JSON中提供的任何内容。

选项3 - 内联JSON(仅用于快速测试)

python -m duckcode_snowflake_reader_mcp_server.main \
  --connection '{"account":"your-account","user":"svc_reader",...}'

在共享外壳或生产环境中避免使用这种方法,因为命令 历史或许会揭开秘密。

Claude Desktop / Claude for Web 配置

将服务器添加到您的MCP配置文件中。替换占位符或切换到 --connection-file / --env-prefix 如果你将密钥挂载到容器中。

{
  "mcpServers": {
    "duckcode-snowflake-reader": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "duckcode-snowflake-reader-mcp-server",
        "--connection",
        "{\"account\":\"your-account\",\"user\":\"svc_reader\",\"password\":\"your-password\",\"warehouse\":\"reporting_wh\",\"database\":\"analytics_db\",\"schema\":\"production\",\"role\":\"ANALYST_ROLE\"}"
      ]
    }
  }
}

svc_reader 只是一个占位符,用于代表任意一个Snowflake用户(通常是一个专门的 您想要以哪个服务账户进行身份验证。转义的引号(\") 是 因为这个 JSON 对象要被嵌入到另一个 JSON 字符串中,所以需要它。 如果你希望避免使用转义字符,请切换到 --connection-file 或者 --env-prefix,它们将凭据保持在其原始的JSON或环境变量中 可变形式。

使用 Docker 运行

docker build -t duckcode-snowflake-reader-mcp-server .
docker run --rm \
  -v /secure/path/snowflake-credentials.json:/run/secrets/snowflake.json:ro \
  duckcode-snowflake-reader-mcp-server \
  --connection-file /run/secrets/snowflake.json

与……一起奔跑 uvx

uvx duckcode-snowflake-reader-mcp-server \
  --env-prefix DUCKCODE_SNOWFLAKE

确保运行时环境变量或密钥文件可用。

可用资源与工具

  • snowflake://tables — 列出配置角色可见的表
  • snowflake://schema/{table_name} — 描述一个表(全限定名)
  • query 工具 — 执行单个只读查询 (SELECT, SHOW, DESC, EXPLAIN, WITH)

许可证

根据MIT许可证分发。详见 LICENSE。