内容
# SAP BDC Snowflake MCP 服务器
一个 [MCP](https://modelcontextprotocol.io) 服务器,用于管理 **SAP Business Data Cloud (BDC)** 在 **Snowflake** 上的集成 — 通过 **SAP BDC Connect 零复制连接器** — 并在 **Cortex Code** 中运行。
它提供了 **20 个工具**,用于在 Snowflake 上发现、配置、验证、发布和排查 SAP BDC 数据产品。
> **移植说明。** 这是基于 Databricks 的 [`sap-bdc-mcp-server`](https://github.com/MarioDeFelipe/sap-bdc-mcp-server) 的 Snowflake 移植版,由 Mario DeFelipe (MIT) 创建。Databricks Delta-Sharing 模型(收件人、共享、Unity 目录、`databricks-sdk`)被映射到 Snowflake **零复制连接器** 模型(`ZEROCOPY CONNECTOR … PARTNER = SAP_BDC`,Snowflake 共享,目录链接数据库)。参见 [`docs/CONVERSION.md`](docs/CONVERSION.md)。
---
## 工作原理
SAP BDC Connect for Snowflake 使用 **零复制连接器** 在 SAP BDC 和 Snowflake 之间架起桥梁,无需数据移动:
- **入站** — SAP 通过连接器 (`SYSTEM$ZEROCOPY_CONNECTOR_LIST_SHARES`) 发布数据产品,这些数据产品出现在 Snowflake 中,并作为 **目录链接数据库** 被消费。
- **出站(共享返回)** — Snowflake **共享** 与连接器 (`ALTER ZEROCOPY CONNECTOR … SET SHARE_BACK=TRUE; ADD SHARE`) 关联,以将 Snowflake 数据集作为数据产品发布回 SAP BDC 目录。
该服务器通过 Snowflake SQL API 使用 `snowflake-connector-python` 驱动该生命周期。
---
## 先决条件
- Python 3.9+
- 具有 **SAP BDC Connect 已启用** 和 **已连接** 的零复制连接器(`SHOW ZEROCOPY CONNECTORS IN ACCOUNT` 显示 `CONNECTED`)的 Snowflake 帐户。连接器本身的设置由 `sap-bdc-connect-for-snowflake` Cortex Code 技能涵盖。
- 具有连接器特权的角色(参见 `validate_snowflake_privileges`):`CREATE ZEROCOPY CONNECTOR`、`OPERATE`/`USAGE`/`MODIFY` 连接器、`CREATE DATABASE`、`CREATE SHARE`。
- `~/.snowflake/connections.toml` 中的命名连接(密钥对、SSO 或密码)。
## 安装
```bash
git clone <此仓库> && cd sap-bdc-snowflake-mcp-server
python3 -m pip install -e .
cp .env.example .env # 然后编辑
```
## 配置
在 `.env` 中设置 Snowflake 连接 + 连接器(或作为环境变量):
```env
SNOWFLAKE_CONNECTION=dfreriksdemo # connections.toml 中的命名连接
BDC_CONNECTOR_NAME=SAP_BDC_CONNECT_ZC
BDC_CONNECTOR_DATABASE=SAP_BDC_CONNECT
BDC_CONNECTOR_SCHEMA=PUBLIC
```
## 在 Cortex Code 中注册
```bash
cortex mcp add sap-bdc-snowflake \
"$(command -v sap-bdc-snowflake-mcp)" \
--transport stdio \
-e SNOWFLAKE_CONNECTION=dfreriksdemo \
-e BDC_CONNECTOR_NAME=SAP_BDC_CONNECT_ZC
```
(或直接指向模块:`python -m sap_bdc_snowflake_mcp.server`。)添加后,`mcp__sap-bdc-snowflake__*` 工具在 Cortex Code 中可用。
---
## 工具(17)
| 工具 | 功能(Snowflake) |
|------|--------------------------|
| `list_shares` | `SHOW SHARES` — 共享返回数据产品 |
| `get_share_details` | `DESC SHARE` — 授予共享的对象 |
| `list_recipients` | 零复制连接器(s)+ 入站 SAP 数据产品 (`SYSTEM$ZEROCOPY_CONNECTOR_LIST_SHARES`) |
| `create_or_update_share` | `CREATE SHARE` + 授予表 |
| `create_or_update_share_csn` | 从 CSN 架构创建共享 |
| `publish_data_product` | 关联共享与连接器 (`SET SHARE_BACK=TRUE; ADD SHARE`) |
| `delete_share` | 从连接器中删除 + `DROP SHARE` |
| `provision_share` | 端到端:创建 → 授予 → 发布 |
| `validate_share_readiness` | 共享存在 + 有对象 + 连接器已连接 |
| `validate_snowflake_privileges` | 检查当前角色的连接器特权 |
| `validate_tenant_hostname` | SAP 租户主机名规则(SAP 注意事項 3652165 / 3705747) |
| `check_cld_asset_support` | 列出现有的目录链接数据库(调用时不带参数),或扫描一个数据库并标记不支持 CLD 消费的对象类型 |
| `list_unsupported_share_assets` | 标记无法共享到 SAP BDC 的资产 |
| `generate_csn_template` | 从共享对象生成 CSN 模板 |
| `validate_csn` | 结构化验证 CSN 文档(定义、元素、cds.* 类型、键) |
| `diff_csn` | 在两个版本之间分类 CSN 更改为重大更改或非重大更改 |
| `render_csn_docs` | 将 CSN 文档渲染为 Markdown |
| `validate_ord_metadata` | 发布前验证 ORD JSON |
| `diagnose_share_error` | 将错误映射到相关的 SAP 注意事項 + 连接器状态修复 |
| `cleanup_orphaned_data_product` | 孤立数据产品的恢复(SAP 注意事項 3720724) |
## 开发
```bash
python3 -m pip install -e ".[dev]"
pytest
```
## 致谢
- Databricks 原始版:[`sap-bdc-mcp-server`](https://github.com/MarioDeFelipe/sap-bdc-mcp-server) 由 Mario DeFelipe (MIT) 创建。
- CSN 质量工具(`validate_csn`、`diff_csn`、`render_csn_docs`)灵感来自 [Rahul Sethi 的 SAP BDC MCP](https://github.com/rahulsethi/SAPBDCMCP) (PolyForm Noncommercial)的合约检查设计。未复制任何源代码 — 参见 [`NOTICE`](NOTICE)。
## 许可证
MIT — 参见 [`LICENSE`](LICENSE) 和 [`NOTICE`](NOTICE)。原始 Databricks 工作 © Mario DeFelipe;Snowflake 移植版 © 2026 贡献者。