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 - 环境变量
通过环境前缀提供值。每个键都变成 _ (例如。 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。
