SAP业务数据云MCP服务器
  
提供与SAP Business Data Cloud(BDC)Connect SDK集成的MCP(模型上下文协议)服务器。该服务器使像Claude这样的人工智能助手能够与SAP BDC进行交互,以实现数据共享、增量共享协议操作和数据产品管理。
状态: ✅ 在PyPI上发布- v0.2.0版本 (2026-01-10) v0.2.0中的新功能: ✨ 添加provision_share(端到端编排)和validate_share_readiness(飞行前验证)工具!
特性
此MCP服务器提供 7个强大的工具 对于SAP BDC操作:
- 创建/更新共享:使用ORD元数据管理数据共享
- CSN架构管理:使用通用语义表示法配置共享
- 数据产品发布:发布和取消发布数据产品
- 共享删除:删除和撤回共享资源
- CSN模板生成:从copula共享中自动生成CSN模板
- 端到端资源调配 ✨: 一步式共享创建、授予和注册
- 飞行前验证 ✨: 在注册前验证股份以防止错误
先决条件
- Python 3.9+(建议本地开发使用Python 3.11+)
- 访问copula环境
- SAP业务数据云帐户
- 已为增量共享配置了copula收件人
- 用于本地开发:Rancher个人访问令牌
快速开始
安装
选择您喜欢的语言/平台:
Python(PyPI)
pip install sap-bdc-mcp-serverNode.js/TypeScript(npm)
npm install @mariodefelize/sap-bdc-mcp-server注: npm包需要安装Python 3.9+,因为它封装了Python MCP服务器。
看 获取完整的Node.js/TypeScript文档。
来源
# Clone the repository
git clone https://github.com/MarioDeFelipe/sap-bdc-mcp-server.git
cd sap-bdc-mcp-server
# Install Python package in development mode
pip install -e .
# Install npm dependencies (optional, for Node.js development)
npm install配置
地方发展(推荐)
创建一个 .env 项目根目录中的文件:
# Databricks Configuration
DATABRICKS_RECIPIENT_NAME=your_recipient_name
DATABRICKS_HOST=https://your-workspace.cloud.databricks.com
DATABRICKS_TOKEN=your_databricks_token
# Optional
LOG_LEVEL=INFO服务器将自动使用 LocalDatabricksClient 无需 dbutils.
适用于copula笔记本环境
如果在ViewModel笔记本中运行,只需设置:
DATABRICKS_RECIPIENT_NAME=your_recipient_name
LOG_LEVEL=INFO服务器将自动检测笔记本电脑环境并使用 dbutils.
用法
Python用法
运行服务器
MCP服务器作为基于stdio的服务运行:
python -m sap_bdc_mcp.server或者使用已安装的脚本:
sap-bdc-mcp与Claude Desktop集成
将此服务器添加到您的Claude Desktop配置文件中:
在MacOS上: ~/Library/Application Support/Claude/claude_desktop_config.json
在Windows上: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"sap-bdc": {
"command": "python",
"args": ["-m", "sap_bdc_mcp.server"],
"env": {
"DATABRICKS_RECIPIENT_NAME": "your_recipient_name"
}
}
}
}Node.js/TypeScript用法
对于Node.js/TypeScript应用程序,请使用npm包:
import { createSapBdcMcpClient } from '@mariodefelize/sap-bdc-mcp-server';
const client = await createSapBdcMcpClient({
env: {
DATABRICKS_HOST: process.env.DATABRICKS_HOST,
DATABRICKS_TOKEN: process.env.DATABRICKS_TOKEN,
DATABRICKS_RECIPIENT_NAME: process.env.DATABRICKS_RECIPIENT_NAME,
},
});
// Validate a share
const validation = await client.validateShareReadiness({
share_name: 'my_share',
});
console.log(validation);
await client.close();看 获取完整的Node.js/TypeScript文档和示例。
或者,如果安装在虚拟环境中:
{
"mcpServers": {
"sap-bdc": {
"command": "C:\\path\\to\\venv\\Scripts\\python.exe",
"args": ["-m", "sap_bdc_mcp.server"],
"env": {
"DATABRICKS_RECIPIENT_NAME": "your_recipient_name"
}
}
}
}可用工具
1.创建或更新共享
使用ORD元数据创建或更新数据共享。
参数:
share_name(必填):股份名称ord_metadata(可选):ORD元数据对象tables(可选):要包含的表名数组
例子:
{
"share_name": "customer_data_share",
"ord_metadata": {
"title": "Customer Data",
"description": "Shared customer information"
},
"tables": ["customers", "orders"]
}2.创建_更新_共享_csn
使用CSN格式创建或更新共享。
参数:
share_name(必填):股份名称csn_schema(必需):CSN模式定义对象
例子:
{
"share_name": "product_share",
"csn_schema": {
"definitions": {
"Products": {
"kind": "entity",
"elements": {
"ID": {"type": "String"},
"name": {"type": "String"}
}
}
}
}
}3.发布_数据_产品
发布数据产品以供使用。
参数:
share_name(必填):股份名称data_product_name(必填):数据产品的名称
例子:
{
"share_name": "customer_data_share",
"data_product_name": "CustomerAnalytics"
}4.删除_共享
删除共享并撤回共享资源。
参数:
share_name(必填):要删除的股份名称
例子:
{
"share_name": "old_share"
}5.generate_csn模板
从现有的copula共享生成CSN模板。
参数:
share_name(必填):copula共享的名称
例子:
{
"share_name": "existing_databricks_share"
}6.准备金_份额✨ 新增:端到端编排
一步配置:在一次操作中创建ViewModel共享、授予收件人并向SAP BDC注册。
此工具协调完整的工作流程:
- 创建ConnectionDelta共享
- 将指定的表添加到共享中
- 将共享授予您配置的收件人
- 在SAP BDC中注册共享
参数:
share_name(必填):要创建的股份名称tables(必填):表名数组(格式:catalog.schema.table或schema.table)ord_metadata(必需):作战需求文件元数据对象
- title (必填):显示股份的标题 - shortDescription:简要说明 - description:详细说明 - version:版本号(例如“1.0.0”) - releaseStatus:状态(例如,“活动”、“测试版”) - tags:标签数组
comment(可选):对Rancher共享的评论auto_grant(可选):自动授予收件人(默认值:true)skip_if_exists(可选):如果共享已存在,则跳过(默认值:true)
例子:
{
"share_name": "customer_analytics",
"tables": ["main.analytics.customers", "main.analytics.orders"],
"ord_metadata": {
"title": "Customer Analytics Data",
"shortDescription": "Customer and order data for analytics",
"description": "Comprehensive customer analytics dataset including customer profiles and order history",
"version": "1.0.0",
"releaseStatus": "active",
"tags": ["analytics", "customer", "orders"]
},
"comment": "Customer analytics share for data consumers",
"auto_grant": true
}它的作用:
- ✅ 创建copula共享(如果存在,则跳过)
- ✅ 将所有指定的表添加到共享中
- ✅ 授予收件人SELECT权限
- ✅ 使用ORD元数据在SAP BDC中注册
- ✅ 提供逐步进度反馈
- ✅ 如果任何步骤失败,显示已完成的步骤和手动执行的步骤
为什么使用此步骤而不是手动步骤:
- 单个命令,而不是4个单独的操作
- 自动错误处理和恢复指导
- Idempotent-如果中断,可以安全重试
- 清楚地了解每个步骤的成功/失败
7.validate_share_ready✨ 新:飞行前验证
注册前验证:检查copula共享是否已准备好进行BDC连接操作。
该工具执行全面的飞行前检查:
- ✅ 验证该共享是否存在于ViewModel中
- ✅ 检查共享是否有表/对象
- ✅ 验证是否已将共享授予您的收件人
- ✅ 如果验证失败,提供可操作的后续步骤
参数:
share_name(必填):要验证的股份名称check_bdc_registration(可选):同时检查BDC注册状态(默认值:false)
例子:
{
"share_name": "customer_data_share"
}成功响应:
✅ Share 'customer_data_share' is READY for BDC Connect registration!
All checks passed:
✅ PASS Share 'customer_data_share' exists in Databricks
✅ PASS Share has 3 object(s)
✅ PASS Share is granted to recipient 'bdc-connect-12345'
Next step: Register with BDC using create_or_update_share('customer_data_share', ...)故障响应:
❌ Share 'test_share' is NOT ready for BDC Connect
Errors found:
❌ Share is empty - no tables added
❌ Share not granted to BDC Connect recipient 'bdc-connect-12345'
Required actions:
1. Add tables: w.shares.update(name='test_share', ...)
2. Grant share: GRANT SELECT ON SHARE test_share TO RECIPIENT `bdc-connect-12345`使用案例:
- 注册前:在调用之前验证共享
create_or_update_share - 故障排除:了解注册失败的原因
- 文档:生成所需内容的清单
- CI/CD管道:部署前自动验证
- 入职:帮助新用户了解先决条件
为什么这很重要:
- 防止“试错”工作流程-提前知道共享是否准备就绪
- 清晰、可操作的指导,而不是神秘的错误消息
- 通过在尝试注册之前发现问题来节省时间
- 在一次通话中验证所有先决条件
建筑
服务器使用:
- MCP-SDK:用于协议实施
- SAP BDC连接SDK:用于SAP业务数据云运营
- 三角洲共享:安全数据共享的开放协议
- ORD协议:用于资源发现和元数据
发展
运行测试
pytest项目结构
sap-bdc-mcp-server/
├── src/
│ └── sap_bdc_mcp/
│ ├── __init__.py
│ ├── server.py # Main MCP server implementation
│ └── config.py # Configuration management
├── pyproject.toml # Project dependencies
├── .env.example # Environment variable template
└── README.md # This file地方发展设置
这 dbutils 挑战
SAP BDC Connect SDK最初设计用于在copula笔记本中运行,需要访问 dbutils (ViewModel实用程序)。这给当地发展带来了挑战。
我们的解决方案:LocalDatabricksClient
我们创造了 LocalDatabricksClient -一个自定义包装器,用于扩展SAP BDC SDK以使其工作 没有 dbutils这使得:
✅ 本地开发 -在您的计算机上运行,无需使用copula笔记本 ✅ IDE集成 -使用您最喜欢的开发工具 ✅ 更容易调试 -标准Python调试工作流程 ✅ CI/CD友好 -在自动化管道中工作 ✅ Claude桌面集成 -直接使用MCP服务器
运作原理
这 LocalDatabricksClient 类别:
- 旁路
dbutils需求 -直接接受工作区URL和API令牌 - 阅读来源
.env文件 -不需要笔记本上下文 - 自动检测模式 -自动使用棕地(BDC连接)或copula连接模式
- 保持兼容性 -与SAP BDC SDK API完全兼容
- 清除错误消息 -如果缺少配置,则提供有用的指导
from sap_bdc_mcp.local_client import LocalDatabricksClient
# Initialize from environment variables
client = LocalDatabricksClient.from_env()
# Or with explicit credentials
client = LocalDatabricksClient(
workspace_url="https://your-workspace.cloud.databricks.com",
api_token="your_token",
recipient_name="your_recipient"
)支持两种模式
BDC连接模式(布朗菲尔德) ✨
- 使用OIDC联盟进行身份验证
- 无需使用copula机密
- 更简单的设置
- 如果已配置收件人,则自动检测
copula连接模式
- 需要额外的机密(api_url、租户、token_audition)
- 可以通过环境变量提供
- 用于绿地部署
安装指南
请参阅我们的综合指南:
- QUICKSTART.md -5分钟后开始
- 实施_成功.md -技术深潜
- HOW_TO_CREATE_SHARE.md -完整的工作流程指南
博客文章/技术文章
重点突出:
- 问题:SAP BDC SDK需要
dbutils,将使用限制在copula笔记本上 - 调查:我们分析了SDK以了解
dbutils实际提供 - 发现:仅2次使用-获取工作区凭据和访问机密
- 解决方案:已创建
LocalDatabricksClient直接注入凭据 - 结果:完整的本地开发支持,代码\<200行
技术亮点:
- 自定义继承自
DatabricksClient - 以(权力)否决
__init__绕过dbutils需求 - 以(权力)否决
_get_secret()从env变量读取 - 维护所有SDK功能
- SAP BDC SDK本身无任何更改
建筑
系统概述
┌─────────────────────────┐
│ Claude Desktop │
│ (MCP Client) │
└───────────┬─────────────┘
│ MCP Protocol (stdio)
┌───────────▼─────────────┐
│ sap_bdc_mcp.server │
│ ┌───────────────────┐ │
│ │ BDCClientManager │ │
│ │ (Auto-detect) │ │
│ └────────┬──────────┘ │
│ ├─────────────┼─ Notebook? → DatabricksClient (dbutils)
│ │ │
│ └─────────────┼─ Local? → LocalDatabricksClient (.env)
└───────────┼─────────────┘
│
┌───────────▼─────────────┐
│ SAP BDC Connect SDK │
│ ┌──────────────────┐ │
│ │ BdcConnectClient │ │
│ └────────┬─────────┘ │
└──────────┼──────────────┘
│ HTTPS/OIDC
┌──────────▼──────────────┐
│ Databricks + SAP BDC │
└─────────────────────────┘传统建筑
服务器使用:
- MCP-SDK:用于协议实施
- SAP BDC连接SDK:用于SAP业务数据云运营
- 三角洲共享:安全数据共享的开放协议
- ORD协议:用于资源发现和元数据
重要说明
copula集成
服务器支持两种集成模式:
1.笔记本模式 (原件)
- 在copula笔记本中运行
- 用途
dbutils获取凭据 - 需要活动笔记本会话
2.本地模式 新✨
- 在本地计算机上运行
- 使用环境变量作为凭据
- 无需笔记本
认证
身份验证通过以下方式处理:
- Databricks工作区凭据(URL+令牌)
- copula中的收件人配置
- SAP BDC服务凭据(在BDC连接模式下自动配置)
故障排除
“BDC客户端未初始化”错误
地方发展:
- 确保
.env文件存在DATABRICKS_HOST,DATABRICKS_TOKEN,以及DATABRICKS_RECIPIENT_NAME - 检查您的copula令牌是否有效
- 验证工作区URL是否正确
对于笔记本电脑环境:
- 确保您正在使用以下命令在copula笔记本中运行
dbutils可用的 - 集
DATABRICKS_RECIPIENT_NAME环境变量
缺少环境变量
对于本地开发,请确保在您的 .env 文件:
DATABRICKS_HOST=https://your-workspace.cloud.databricks.com
DATABRICKS_TOKEN=dapi...
DATABRICKS_RECIPIENT_NAME=your_recipient_name“共享不存在”错误
在向SAP BDC注册之前,该共享必须存在于ViewModel中:
- 首先在copula中创建增量共享
- 将股份授予您的收件人
- 然后使用此服务器向SAP BDC注册它
看 HOW_TO_CREATE_SHARE.md 详细步骤。
“权限被拒绝”或“未向收件人授予共享”
将该份额授予您在Databricks中的收件人:
GRANT SELECT ON SHARE your_share_name TO RECIPIENT `your_recipient_name`;资源
许可证
此MCP服务器按原样提供。使用此集成时,请查看SAP BDC Connect SDK许可条款。
贡献
欢迎投稿!请查看 贡献.md 有关以下内容的详细信息:
- 设置您的开发环境
- 运行测试
- 提交拉取请求
- 代码风格指南
路线图
- \[x\] 使用copula环境进行初步验证
- \[x\] 本地开发支持(LocalDatabricksClient)
- \[x\] PyPI包发布
- \[x\] 全面的文件
- \[\]Node.js环境的npm包
- \[\]其他SAP BDC SDK功能
- \[\]增强的错误处理和日志记录
- \[\]更多集成示例和教程
- \[\]视频教程和演示
支持
- 问题:
- 讨论:
- 文档: 维基
致谢
- BDC Connect SDK的SAP
- 模型上下文协议的拟人化
- MCP社区寻求灵感和支持
