🚀 SAP数据圈MCP服务器
](https://pypi.org/project/sap-datasphere-mcp/) ](https://www.npmjs.com/package/@mariodefe/sap-datasphere-mcp)     [![Real Data]()](<>) [![API Integration]()](<>)
生产就绪的模型上下文协议(MCP)服务器,使AI助手能够与SAP Datasphere环境无缝交互,以进行真实租户数据发现、元数据探索、分析操作、ETL数据提取、数据库用户管理、数据沿袭分析和列级数据分析。
🆕 最新动态(v1.2.1-2026.10版)
get_asset_variables工具 --OData中声明的表面输入参数/变量和过滤器功能注释$metadata。在查询之前,使用它来发现参数化视图或分析模型所期望的变量。- 变量和过滤器解析 —
parse_odata_metadata_xml_full回报{columns, variables, filters}在一次通话中;遗产parse_odata_metadata_xml被保存为后compat包装。 - 与SAP Datasphere浪潮保持一致 2026.10 (2026年5月6日)。遗产
/api/v1/dwc/consumption/...路径已弃用--使用/api/v1/datasphere/consumption/....
🚀 快速开始
选项1:通过npm安装(建议Node.js/Claude Desktop使用)
# Install globally
npm install -g @mariodefe/sap-datasphere-mcp
# Run the server
npx @mariodefe/sap-datasphere-mcp选项2:通过PyPI(Python)安装
# Install from PyPI
pip install sap-datasphere-mcp
# Run the server
sap-datasphere-mcp看 入门指南 有关完整的设置说明。
______________________________________________________________________
✨ v1.1.0的新增功能
🌐 可流式HTTP传输 --服务器现在通过HTTP和stdio传输MCP,因此您可以将其作为长期服务(Docker、ECS、App Runner、反向代理后面)运行,并将多个客户端指向同一实例。
亮点
- ✅ 新
--transport http旗帜 --服务于MCP流式HTTP(规范2025-03-26)/mcp,用单个HTTP路由替换传统的SSE双端点舞蹈。 - ✅ 向后兼容 —
stdio仍然是默认值;现有的Claude Desktop/Claude Code配置保持不变。 - ✅ 可选的承载令牌身份验证 --启用via
--auth-token或MCP_HTTP_AUTH_TOKEN。如果绑定到没有环回接口的非环回接口,服务器会发出警告。 - ✅
/health端点 --用于负载均衡器和正常运行时间检查的普通JSON活性探测。 - ✅ 固定异步入口点 新
main_sync()包裹asyncio.run(main())因此控制台脚本在macOS和Linux上可靠地工作。
用法
# stdio (default, unchanged)
sap-datasphere-mcp
# Streamable HTTP on http://127.0.0.1:8080/mcp
sap-datasphere-mcp --transport http --port 8080
# Exposed on LAN with bearer-token auth
MCP_HTTP_AUTH_TOKEN=$(openssl rand -hex 32) \
sap-datasphere-mcp --transport http --host 0.0.0.0 --port 8080
# Via env vars only (great for Docker / ECS)
MCP_TRANSPORT=http MCP_HTTP_PORT=8080 \
MCP_HTTP_AUTH_TOKEN=$MY_TOKEN \
sap-datasphere-mcp使用HTTP附加功能进行安装
pip install 'sap-datasphere-mcp[http]' # adds starlette + uvicorn
# or
uv tool install 'sap-datasphere-mcp[http]' --python 3.12客户端调用示例
curl -N -X POST http://127.0.0.1:8080/mcp/ \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize",
"params":{"protocolVersion":"2025-03-26",
"capabilities":{},
"clientInfo":{"name":"curl","version":"0"}}}'CLI/env参考
| 标志 | 环境变量 | 默认值 | 目的 |
|---|---|---|---|
--transport | MCP_TRANSPORT | stdio | stdio 或 http |
--host | MCP_HTTP_HOST | 127.0.0.1 | 在HTTP模式下绑定地址 |
--port | MCP_HTTP_PORT | 8080 | 在HTTP模式下绑定端口 |
--path | MCP_HTTP_PATH | /mcp | MCP端点的URL路径 |
--auth-token | MCP_HTTP_AUTH_TOKEN | _(无)_ | 需要 Authorization: Bearer |
看 PR#31 了解实施细节。
______________________________________________________________________
✨ v1.0.9的新增功能
增强聚合和改进日志记录 -生产就绪的智能查询增强功能:
v1.0.9-智能查询增强功能:
- ✅ 简单聚合支持 -查询如下
SELECT COUNT(*) FROM table现在工作正常
- 支持没有GROUP BY的聚合(返回单行) - 增强正则表达式以处理GROUP BY查询中的ORDER BY - 完全支持简单聚合和分组聚合
- ✅ 增强的资产检测 -多策略搜索减少误报
- 精确名称匹配+包含不区分大小写的搜索匹配 - API目录限制的优雅后退 - 更好地处理模式前缀视图
- ✅ 改进日志记录 -更好的用户体验,信息更清晰
- 信息表情符号(ℹ️) 而不是警告表情符号(⚠️) 对于非关键消息 - 更准确的描述(“不在目录搜索中”与“未找到”) - 仅当查询可能失败时才提供可操作的建议
v1.0.8-关键修补程序:
- ✅ 修复了聚合回退错误-客户端聚合现在可以在主路径和回退路径中工作
v1.0.7-智能查询生产增强:
- ✅ GROUP BY查询的客户端聚合
- ✅ 资产能力检测
- ✅ 模糊表名匹配
- ✅ 极限下推优化
结果: 45工具 支持所有SQL模式的生产就绪智能查询引擎
看 CHANGELOG_v1.0.9.md 了解完整细节。
______________________________________________________________________
📊 当前状态
🎉 45个可用工具-44个具有真实数据(98%) | 阶段1-5.1完整+智能查询引擎
- ✅ 98%真实数据集成 -44/45个工具访问实际租户数据
- ✅ OAuth 2.0身份验证 -具有自动令牌刷新功能的企业级安全
- ✅ 100%基础工具 -所有身份验证、连接和用户工具都工作正常
- ✅ 100%目录工具 -完成资产发现和元数据探索
- ✅ 100%搜索工具 -目录和存储库的客户端搜索解决方法
- ✅ 100%数据库用户管理 -使用真实SAP Datasphere CLI的所有5个工具
- ✅ 100%ETL工具 -所有4个具有企业级数据提取功能的Phase 5.1工具(最多50K条记录)
- ✅ 新:数据谱系和质量 -列搜索和分布分析工具
- 🟡 1个诊断工具 -端点测试实用程序(有意模拟模式)
______________________________________________________________________
📚 完整文档
新全面的生产准备文件:
| 指南 | 说明 | 阅读时间 |
|---|---|---|
| 📖 入门指南 | 10分钟快速入门示例 | 10分钟 |
| 📋 工具目录 | 所有44种工具的完整参考 | 30分钟 |
| 🔧 API 参考 | 带有Python/cURL示例的API技术文档 | 45分钟 |
| 🚀 部署指导 | 生产部署(Docker、K8s、PyPI) | 20分钟 |
| 🐛 故障排除 | 常见问题和解决方案 | 15分钟 |
快速链接:
______________________________________________________________________
📊 查询示例和可用数据
服务器提供访问 37+数据资产 包括销售、产品、人力资源、财务和时间维度数据。看 QUERY_EXAMPLES.md 查看完整的示例和文档。
可用数据资产
- 销售数据: 详细的订单和分析(All For Bikes、eBike 100等)
- 产品目录: 叉车(7900美元),自行车(288-699美元),规格
- 人力资源分析: 员工人数、职位分类、地点
- 财务数据: 交易明细和总账账户
- 时间维度: 1900年至今的日历数据
快速示例
销售订单(关系型):
query_relational_entity(
space_id="SAP_CONTENT",
asset_id="SAP_SC_SALES_V_SalesOrders",
entity_name="SAP_SC_SALES_V_SalesOrders",
select="SALESORDERID,COMPANYNAME,GROSSAMOUNT,CURRENCY",
top=5
)产品信息(关系):
query_relational_entity(
space_id="SAP_CONTENT",
asset_id="SAP_SC_FI_V_ProductsDim",
entity_name="SAP_SC_FI_V_ProductsDim",
select="PRODUCTID,MEDIUM_DESCR,PRICE,CURRENCY",
top=5
)销售分析(分析):
query_analytical_data(
space_id="SAP_CONTENT",
asset_id="SAP_SC_SALES_AM_SalesOrders",
entity_set="SAP_SC_SALES_AM_SalesOrders",
select="COMPANYNAME,GROSSAMOUNT",
orderby="GROSSAMOUNT desc",
top=8
)演出 1-5秒的响应时间,每批最多50K条记录。
看 QUERY_EXAMPLES.md 对于37+个数据资产,5个详细示例和最佳实践。
______________________________________________________________________
🌟 主要亮点
- 🎯 45 MCP工具:通过模型上下文协议实现全面的SAP数据圈操作
- 🔐 OAuth 2.0:具有自动令牌刷新功能的生产就绪身份验证
- ✅ 真实数据访问:44个工具(98%)访问实际租户数据-空间、资产、用户、元数据
- 🚀 API集成:44种工具(98%),通过API和CLI实现真实数据集成
- 🧠 智能查询引擎:为所有查询类型提供客户端聚合的生产就绪SQL支持
- 🔍 资产发现:发现36+实物资产(人力资源、财务、销售、时间维度)
- 📊 数据查询:通过自然语言对真实数据执行OData查询和ETL提取
- 🧬 数据血缘:按列名查找资产,以进行影响分析和沿袭跟踪
- 📈 数据质量:具有零率、百分位数和异常值检测的统计列分析
- 👥 用户管理:使用真实的API创建、更新和管理数据库用户
- 🧠 AI集成:Claude Desktop、Cursor IDE和其他MCP兼容助手
- 🏆 100%基础和目录工具:所有岩心发现工具功能齐全
- 📦 生产就绪:Docker、Kubernetes、PyPI打包可用
______________________________________________________________________
🛠️ 完整的工具目录(45个工具)
🏆 真实数据成功总结
| 类别 | 工具总数 | 实际数据 | 成功率 |
|---|---|---|---|
| 基础工具 | 5 | 5 ✅ | 100% |
| 目录工具 | 4 | 4 ✅ | 100% |
| 太空探索 | 3 | 3 ✅ | 100% |
| 搜索工具 | 2 | 2 ✅ | 100% (客户端变通方法) |
| 数据发现和质量 | 2 | 2 ✅ | 100% (v1.0.3-谱系和分析) |
| 数据库用户管理 | 5 | 5 ✅ | 100% (SAP CLI集成) |
| 元数据工具 | 4 | 4 ✅ | 100% |
| 分析消费工具 | 4 | 4 ✅ | 100% (OData分析查询) |
| 附加工具 | 5 | 5 ✅ | 100% (连接、任务、市场等) |
| 关系查询工具 | 1 | 1 ✅ | 100% (SQL到OData的转换) |
| 智能查询引擎 | 1 | 1 ✅ | 100% (v1.0.9-支持所有SQL模式) |
| ETL优化关系工具 | 4 | 4 ✅ | 100% (第5.1阶段-最多50K条记录) |
| 诊断工具 | 3 | 0 🟡 | 模拟模式 (端点测试实用程序) |
| 存储库工具(旧版) | 2 | 0 ❌ | 0% (已弃用-改用Catalog) |
| 总计 | 45 | 44 (98%) | 98%覆盖率 |
______________________________________________________________________
🔐 基础工具(5个工具)-100%真实数据✅
| 工具 | 状态 | 描述 |
|---|---|---|
test_connection | ✅ 真实数据 | 测试OAuth连接并获取健康状态 |
get_current_user | ✅ 真实数据 | 从JWT令牌中获取经过身份验证的用户信息 |
get_tenant_info | ✅ 真实数据 | 获取SAP Datasphere租户配置 |
get_available_scopes | ✅ 真实数据 | 列出令牌中的OAuth2作用域 |
list_spaces | ✅ 真实数据 | 列出所有可访问的空间(DEVAULT_SPACE、SAP_CONTENT) |
示例查询:
"Test the connection to SAP Datasphere"
"Who am I? Show my user information"
"What tenant am I connected to?"
"What OAuth scopes do I have?"
"List all SAP Datasphere spaces"真实数据示例:
- 真正的租户:your-tent.eu20.hcs.cloud.sap
- 真实空间:DEVAULT_SPACE,SAP_CONTENT
- OAuth JWT令牌中的真实用户信息
- 真正的OAuth作用域(通常为3个以上的作用域)
______________________________________________________________________
🔍 太空探索工具(3个工具)-100%真实数据✅
| 工具 | 状态 | 描述 |
|---|---|---|
get_space_info | ✅ 真实数据 | 获取特定空间的详细信息 |
get_table_schema | ✅ 真实数据 | 获取表的列定义和数据类型 |
search_tables | ✅ 真实数据 | 按关键字搜索表和视图(客户端过滤) |
示例查询:
"Show me details about the SAP_CONTENT space"
"Get the schema for FINANCIAL_TRANSACTIONS table"
"Search for tables containing 'customer'"真实数据示例:
- API的真实空间元数据
- 真实表模式(当表存在于空间中时)
- search_tables使用客户端筛选解决方法(API不支持OData筛选器)
______________________________________________________________________
📦 目录和资产工具(4个工具)-100%真实数据✅
| 工具 | 状态 | 描述 |
|---|---|---|
list_catalog_assets | ✅ 真实数据 | 跨空间浏览所有目录资产(找到36+资产!) |
get_asset_details | ✅ 真实数据 | 获取全面的资产元数据和模式 |
get_asset_by_compound_key | ✅ 真实数据 | 按空间和名称检索资产 |
get_space_assets | ✅ 真实数据 | 列出特定空间内的所有资产 |
示例查询:
"List all catalog assets in the system"
"Get details for asset SAP_SC_FI_AM_FINTRANSACTIONS"
"Show me all assets in the SAP_CONTENT space"
"Get asset by compound key: space=SAP_CONTENT, id=SAP_SC_HR_V_Divisions"发现的不动产(36+不动产):
- 人力资源资产:SAP_SC_HR_V_部门、SAP_SC_HR \_V_作业类、SAP_SC\_ HR_V_位置、SAP_SC~HR_V_作业
- 金融资产:SAP_SC_FI_V_产品尺寸,SAP_SC_FIA_AM_FINTRANSACTIONS
- 时间和销售模式:具有真实元数据URL的多个分析模型
- 所有资产 包括指向租户的真实元数据URL
______________________________________________________________________
🔎 搜索工具(2个工具)-100%真实数据✅
| 工具 | 状态 | 描述 |
|---|---|---|
search_catalog | ✅ 真实数据 | 按查询搜索目录资产(客户端解决方法) |
search_repository | ✅ 真实数据 | 使用过滤器搜索存储库对象(客户端解决方法) |
示例查询:
"Search catalog for 'sales'"
"Find repository objects containing 'customer'"
"Search for analytical models in SAP_CONTENT"真实数据示例:
- 客户端在名称、标签、业务名称和描述字段之间进行搜索
- 支持方面(objectType、spaceId聚合)
- 支持过滤器(object_types、space_id)
- 支持why_found跟踪(显示匹配的字段)
- 分页和总计报告
实施: 这两个工具都使用客户端搜索解决方法,因为 /api/v1/datasphere/consumption/catalog/search 端点返回404 Not Found。他们从以下位置获取所有资产 /catalog/assets 并在客户端进行过滤。
______________________________________________________________________
🔬 数据发现和质量工具(2个工具)-100%真实数据✅
| 工具 | 状态 | 描述 |
|---|---|---|
find_assets_by_column | ✅ 真实数据 | 查找包含数据沿袭特定列名的所有资产 |
analyze_column_distribution | ✅ 真实数据 | 列数据分布和质量分析的统计分析 |
示例查询:
"Which tables contain CUSTOMER_ID column?"
"Find all assets with SALES_AMOUNT"
"Analyze the distribution of ORDER_TOTAL column"
"What's the data quality of CUSTOMER_AGE field?"
"Profile the PRICE column for outliers"真实数据示例:
- 数据血缘:跨空间列搜索,模式更改前的影响分析
- 质量分析:零率、不同值、百分位数、异常检测(IQR法)
- 用例:数据发现、模式关系映射、数据质量评估、预分析分析分析
实施: v1.0.3中引入的两个工具都提供了高级数据发现和质量功能:
find_assets_by_column:跨多个空格搜索,默认情况下不区分大小写,最多200个结果analyze_column_distribution:分析多达10000条记录,自动类型检测,百分位数分析
______________________________________________________________________
📊 元数据工具(4个工具)-100%真实数据✅
| 工具 | 状态 | 描述 |
|---|---|---|
get_catalog_metadata | ✅ 真实数据 | 检索目录服务的CSDL元数据模式 |
get_analytical_metadata | ✅ 真实数据 | 通过飞行前检查获取分析模型元数据 |
get_relational_metadata | ✅ 真实数据 | 使用SQL类型映射获取关系模式 |
list_analytical_datasets | ✅ 真实数据 | 列出分析数据集(固定查询参数) |
示例查询:
"Get the catalog metadata schema"
"Retrieve analytical metadata for SAP_SC_FI_AM_FINTRANSACTIONS"
"Get relational schema for CUSTOMER_DATA table"
"List analytical datasets"状态: 所有4个工具都通过适当的错误处理和能力检查返回真实数据。
______________________________________________________________________
👥 数据库用户管理工具(5个工具)-100%真实数据✅
| 工具 | 状态 | 描述 | 需要同意 |
|---|---|---|---|
list_database_users | ✅ 真实数据 | 列出所有数据库用户(SAP CLI) | 否 |
create_database_user | ✅ 真实数据 | 创建新的数据库用户(SAP CLI) | 是(ADMIN) |
update_database_user | ✅ 真实数据 | 更新用户权限(SAP CLI) | 是(ADMIN) |
delete_database_user | ✅ 真实数据 | 删除数据库用户(SAP CLI) | 是(ADMIN) |
reset_database_user_password | ✅ 真实数据 | 重置用户密码(SAP CLI) | 是(敏感) |
示例查询:
"List all database users in SAP_CONTENT space"
"Create a new database user named ETL_USER"
"Update permissions for DB_USER_001"
"Delete database user TEST_USER"
"Reset password for DB_USER_001"状态: 所有5个工具都使用真正的SAP Datasphere CLI集成,包括子流程执行、临时文件处理和全面的错误处理。
同意管理: 高风险操作(创建、更新、删除、重置密码)需要用户在首次使用时同意。同意书被缓存60分钟。
______________________________________________________________________
🔧 API语法修复(4个工具)-100%真实数据✅
| 工具 | 状态 | 描述 |
|---|---|---|
search_tables | ✅ 真实数据 | 搜索表/视图(客户端过滤) |
get_deployed_objects | ✅ 真实数据 | 列出已部署的对象(删除了不受支持的筛选器) |
list_analytical_datasets | ✅ 真实数据 | 列表数据集(固定查询参数) |
get_analytical_metadata | ✅ 真实数据 | 获取元数据(飞行前能力检查) |
状态: 在第2阶段修复的所有4个工具都删除了不受支持的OData过滤器,并添加了客户端解决方法。
______________________________________________________________________
🔧 HTML响应修复(2个工具)-100%真实数据✅
| 工具 | 状态 | 描述 |
|---|---|---|
get_task_status | ✅ 真实数据 | 对HTML响应进行优雅的错误处理 |
browse_marketplace | ✅ 真实数据 | 仅限UI端点的专业降级 |
状态: 这两个工具在第3阶段都得到了修复——当端点返回HTML而不是JSON时,添加了内容类型验证和有用的错误消息。
______________________________________________________________________
📈 分析消费工具(4个工具)-100%真实数据✅
| 工具 | 状态 | 描述 |
|---|---|---|
get_analytical_model | ✅ 真实数据 | 获取OData服务文档和分析模型元数据 |
get_analytical_service_document | ✅ 真实数据 | 获取服务功能、实体集和导航属性 |
list_analytical_datasets | ✅ 真实数据 | 列出模型的所有分析数据集和实体集 |
query_analytical_data | ✅ 真实数据 | 使用$select、$filter、$apply、$top执行OData分析查询 |
示例查询:
"Get analytical model for SAP_SC_FI_AM_FINTRANSACTIONS"
"Show me the service document for SAP_SC_HR_V_Divisions"
"List all datasets in the analytical model"
"Query analytical data from SAP_SC_FI_AM_FINTRANSACTIONS with filters"真实数据特征:
- OData v4.0分析消耗API(/API/v1/datasphere/消耗/分析)
- 完整的元数据发现(服务文档、实体集、属性)
- 使用$filter、$select、$top、$skip、$orderby进行高级过滤
- 使用$apply支持聚合(groupby、聚合函数)
- 来自SAP Datasphere实例的真实租户数据
状态:所有4个分析消费工具都可以使用真实的SAP Datasphere数据完全运行!
______________________________________________________________________
🔌 附加工具(5个工具)-100%真实数据✅
| 工具 | 状态 | 描述 |
|---|---|---|
list_connections | ✅ 真实数据 | 列出所有已配置的连接(HANA、S/4HANA等) |
get_task_status | ✅ 真实数据 | 监控任务执行状态和进度 |
browse_marketplace | ✅ 真实数据 | 浏览数据市场资产和包 |
get_consumption_metadata | ✅ 真实数据 | 获取消费层元数据(CSDL模式) |
get_deployed_objects | ✅ 真实数据 | 列出空间中所有已部署的对象 |
示例查询:
"List all connections in the system"
"Check the status of task 12345"
"Browse the Data Marketplace"
"Get consumption metadata schema"
"Show deployed objects in SAP_CONTENT"状态:所有附加工具都提供了基本的系统管理功能,并提供了完整的真实数据支持。
______________________________________________________________________
🧪 诊断工具(3个工具)-端点测试实用程序
| 工具 | 状态 | 描述 |
|---|---|---|
test_analytical_endpoints | 🧪 诊断 | 测试分析/查询API端点可用性 |
test_phase67_endpoints | 🧪 诊断 | 测试第6和第7阶段端点可用性(KPI、监控、用户) |
test_phase8_endpoints | 🧪 诊断 | 测试第8阶段端点可用性(数据共享、AI功能) |
目的:这些诊断工具有助于验证哪些SAP Datasphere API端点在特定租户配置中可用。它们返回具有以下内容的结构化报告:
- 每个端点的HTTP状态代码
- 错误消息和故障排除指南
- 解决方法或替代工具的建议
状态:诊断工具有意使用模拟/测试模式来验证端点可用性,而无需修改数据。
______________________________________________________________________
🗂️ 存储库工具(2个工具)-已弃用(改用目录)
| 工具 | 状态 | 描述 |
|---|---|---|
list_repository_objects | ⚠️ 弃用 | 列出存储库对象(改用List_catalog_assets) |
get_object_definition | ⚠️ 弃用 | 获取对象定义(改用Get_asset_details) |
推荐:这些旧版存储库工具已弃用。请改用现代目录工具:
- 替换
list_repository_objects→list_catalog_assets或search_catalog - 替换
get_object_definition→get_asset_details
状态:目录工具提供卓越的功能和完整的真实数据支持。
______________________________________________________________________
🔐 关系查询工具(1个工具)-100%真实数据✅
| 工具 | 状态 | 描述 | 需要同意 |
|---|---|---|---|
execute_query | ✅ 真实数据 | 使用SQL对Datasphere表/视图执行SQL查询→OData转换 | 是(写入) |
示例查询:
"Execute query: SELECT * FROM SAP_SC_FI_AM_FINTRANSACTIONS LIMIT 10"
"Query: SELECT customer_id, amount FROM SALES_ORDERS WHERE status = 'COMPLETED' LIMIT 50"
"Get data: SELECT * FROM SAP_SC_HR_V_Divisions"真实数据特征:
- SQL到OData的转换:自动将SQL查询转换为OData API调用
- 关系消费API:
/api/v1/datasphere/consumption/relational/{space_id}/{view_name} - 支持的SQL语法:
- SELECT * 或 SELECT column1, column2 → OData $select - WHERE conditions → OData $filter (基本转换) - LIMIT N → OData $top
- 查询安全:最多1000行,超时60秒
- 错误处理:找不到表的有用消息、解析错误、权限问题
SQL转换示例:
SELECT * FROM CUSTOMERS WHERE country = 'USA' LIMIT 10
→ GET /relational/SPACE/CUSTOMERS?$filter=country eq 'USA'&$top=10
SELECT customer_id, name FROM ORDERS LIMIT 20
→ GET /relational/SPACE/ORDERS?$select=customer_id,name&$top=20局限性:
- 无JOIN(仅限于OData单表查询)
- 基本的WHERE子句转换(简单的比较工作)
- 无分组,按顺序(未来增强)
- 表/视图名称区分大小写
状态: ✅ 与真实的SAP Datasphere数据完全兼容!测试并确认工作正常。
______________________________________________________________________
🧠 智能查询引擎(1个工具)-100%真实数据✅ 新版v1.0.9!
| 工具 | 状态 | 描述 | 需要同意 |
|---|---|---|---|
smart_query | ✅ 真实数据 | 具有客户端聚合和多层回退功能的智能SQL查询路由器 | 否(READ) |
示例查询:
"Query: SELECT * FROM SAP_SC_FI_V_ProductsDim LIMIT 5"
"Get product counts by category: SELECT PRODUCTCATEGORYID, COUNT(*) FROM SAP_SC_FI_V_ProductsDim GROUP BY PRODUCTCATEGORYID"
"Simple aggregation: SELECT COUNT(*), AVG(PRICE) FROM SAP_SC_FI_V_ProductsDim"
"Analytics with sorting: SELECT CATEGORY, COUNT(*), AVG(PRICE) FROM Products GROUP BY CATEGORY ORDER BY COUNT(*) DESC"真实数据特征:
- 智能路由:根据查询类型和资产功能自动在分析端点和关系端点之间进行选择
- 客户端聚合:当API不支持SQL聚合时,完全支持它们
- 简单聚合: SELECT COUNT(*) FROM table (返回单行) - 按聚合分组: SELECT category, COUNT(*) FROM table GROUP BY category - 所有聚合函数:COUNT、SUM、AVG、MIN、MAX
- 资产能力检测:在执行查询之前,进行多策略搜索以验证资产支持
- 增强的错误消息:模糊表名与可操作建议匹配
- 极限按下:自动将SQL LIMIT转换为OData$top以获得最佳性能
- 多层回退:初级(分析)→ 回退(关系+聚合)→ 有用的错误
支持的查询类型:
-- Simple queries
SELECT * FROM table LIMIT 10
-- Simple aggregations (NEW in v1.0.9)
SELECT COUNT(*) FROM table
SELECT COUNT(*), AVG(price), MAX(price) FROM table
-- GROUP BY aggregations
SELECT category, COUNT(*), AVG(price) FROM table GROUP BY category
-- Complex queries with ORDER BY
SELECT category, COUNT(*) as cnt FROM table GROUP BY category ORDER BY cnt DESC LIMIT 5演出
- 响应时间:500ms-2s,具体取决于数据量
- 批量大小:每次查询最多50000条记录
- 优化:LIMIT下推可将数据传输减少高达95%
状态: ✅ 具备全面SQL支持的生产就绪!所有常见的查询模式都能完美运行(v1.0.7-v1.0.9增强版)。
______________________________________________________________________
🏭 ETL优化关系工具(4个工具)-100%真实数据✅ 新阶段5.1!
| 工具 | 状态 | 描述 | 需要同意 |
|---|---|---|---|
list_relational_entities | ✅ 真实数据 | 列出资产中用于ETL操作的所有可用关系实体(表/视图) | 否(READ) |
get_relational_entity_metadata | ✅ 真实数据 | 使用SQL类型映射(OData)获取实体元数据→SQL)用于数据仓库加载 | 否(READ) |
query_relational_entity | ✅ 真实数据 | 使用大批量处理(最多50000条记录)执行OData查询以进行ETL提取 | 否(READ) |
get_relational_odata_service | ✅ 真实数据 | 获取具有ETL规划功能和查询优化指导的OData服务文档 | 否(阅读) |
示例查询:
"List all relational entities in SAP_CONTENT space for asset SAP_SC_SALES_V_Fact_Sales"
"Get entity metadata with SQL types for SAP_CONTENT/SAP_SC_SALES_V_Fact_Sales"
"Query relational entity from SAP_CONTENT, asset SAP_SC_SALES_V_Fact_Sales, entity Results, limit 1000"
"Get OData service document for SAP_CONTENT/SAP_SC_SALES_V_Fact_Sales with ETL capabilities"真实数据特征:
- 大批量加工:每次查询最多提取50000条记录(execute_query为1000条)
- SQL类型映射:自动OData到SQL类型转换(NVARCHAR、BIGINT、DECIMAL、DATE等)
- ETL规划:服务发现、实体枚举、批大小建议
- 性能优化:增量提取、并行加载、分页策略
- 生产质量:实际生产数据的响应时间低于秒
ETL用例:
- 数据仓库加载:为目标数据库提取具有适当SQL类型的大型数据集
- 增量提取:使用
$filter带有用于增量负载的日期列 - 并行提取:使用
$skip对大容量数据有多个并发请求 - 架构发现:在ETL作业之前获取包含列类型、精度和规模的完整元数据
高级查询功能:
OData Parameters Supported:
- $filter: Complex filtering expressions (e.g., "amount gt 1000 and status eq 'ACTIVE'")
- $select: Column projection (e.g., "customer_id,amount,date")
- $top/$skip: Pagination (up to 50K per batch)
- $orderby: Sorting (e.g., "amount desc, date asc")SQL类型映射示例:
Edm.String → NVARCHAR(MAX)
Edm.Int32 → INT
Edm.Int64 → BIGINT
Edm.Decimal → DECIMAL(18,2)
Edm.Double → DOUBLE
Edm.Date → DATE
Edm.DateTime → TIMESTAMP
Edm.Boolean → BOOLEAN端点模式:
GET /api/v1/datasphere/consumption/relational/{space}/{asset} → List entities
GET /api/v1/datasphere/consumption/relational/{space}/{asset}/$metadata → Get metadata
GET /api/v1/datasphere/consumption/relational/{space}/{asset}/{entity} → Query data状态: ✅ 所有4个工具功能齐全,具有企业级ETL功能!用真实的生产销售数据进行测试,在大型结果集下实现了亚秒级的性能。
______________________________________________________________________
🚀 快速开始
先决条件
Python 3.10+
SAP Datasphere account with OAuth 2.0 configured
Technical User with appropriate permissions安装
# 1. Clone the repository
git clone https://github.com/MarioDeFelipe/sap-datasphere-mcp.git
cd sap-datasphere-mcp
# 2. Install dependencies
pip install -r requirements.txt
# 3. Configure OAuth credentials
cp .env.example .env
# Edit .env with your SAP Datasphere OAuth credentials
# 4. Start MCP Server
python sap_datasphere_mcp_server.py配置
创建一个 .env 包含SAP Datasphere凭据的文件:
# SAP Datasphere Connection
DATASPHERE_BASE_URL=https://your-tenant.eu10.hcs.cloud.sap
DATASPHERE_TENANT_ID=your-tenant-id
# OAuth 2.0 Credentials (Technical User)
DATASPHERE_CLIENT_ID=your-client-id
DATASPHERE_CLIENT_SECRET=your-client-secret
DATASPHERE_TOKEN_URL=https://your-tenant.authentication.eu10.hana.ondemand.com/oauth/token
# Optional: Mock Data Mode (for testing without real credentials)
USE_MOCK_DATA=false⚠️ 重要提示: 永远不要承诺你的 .env 文件到版本控制!
📖 需要OAuth设置方面的帮助吗? 请参阅完整指南: OAuth设置指南
______________________________________________________________________
🤖 AI助手集成
克劳德桌面版
选项1:使用npm(推荐)
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"sap-datasphere": {
"command": "npx",
"args": ["@mariodefe/sap-datasphere-mcp"],
"env": {
"DATASPHERE_BASE_URL": "https://your-tenant.eu20.hcs.cloud.sap",
"DATASPHERE_CLIENT_ID": "your-client-id",
"DATASPHERE_CLIENT_SECRET": "your-client-secret",
"DATASPHERE_TOKEN_URL": "https://your-tenant.authentication.eu20.hana.ondemand.com/oauth/token"
}
}
}
}选项2:直接使用Python
{
"mcpServers": {
"sap-datasphere": {
"command": "python",
"args": ["-m", "sap_datasphere_mcp_server"],
"env": {
"DATASPHERE_BASE_URL": "https://your-tenant.eu20.hcs.cloud.sap",
"DATASPHERE_CLIENT_ID": "your-client-id",
"DATASPHERE_CLIENT_SECRET": "your-client-secret",
"DATASPHERE_TOKEN_URL": "https://your-tenant.authentication.eu20.hana.ondemand.com/oauth/token"
}
}
}
}地点:
- 窗户:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
自然语言查询示例
配置后,询问您的AI助手:
太空与探索:
"List all SAP Datasphere spaces"
"Show me the schema for the CUSTOMERS table"
"Search for tables containing 'sales' in SAP_CONTENT"元数据探索:
"Get the analytical metadata for REVENUE_ANALYSIS"
"Show me the catalog metadata schema"
"Get relational schema for FINANCIAL_TRANSACTIONS"分析查询:
"Query financial data where Amount > 1000"
"Get analytical model for SALES_ANALYTICS.REVENUE_ANALYSIS"
"Execute aggregation: group by Currency and sum Amount"用户管理:
"List all database users"
"Create a new database user named ETL_READER"
"Update permissions for user DB_USER_001"存储库对象:
"Get the complete definition for SAP_SC_FI_AM_FINTRANSACTIONS"
"Show me all assets in SAP_CONTENT space"
"Get repository search metadata"______________________________________________________________________
🔒 安全功能
OAuth 2.0身份验证
- ✅ 客户端凭据流:安全的技术用户身份验证
- ✅ 自动令牌刷新:令牌在到期前60秒刷新
- ✅ 加密存储:使用Fernet加密在内存中加密的令牌
- ✅ 代码中没有凭据:从环境变量加载的所有机密
- ✅ 重试逻辑:瞬态故障的指数回退
授权与同意
- ✅ 权限级别:读、写、管理、敏感
- ✅ 使用者同意:高风险操作的交互式提示
- ✅ 审计日志:完整的运营审计跟踪
- ✅ 输入验证:15种以上攻击模式的SQL注入防御
- ✅ 数据筛选:自动PII和凭证编辑
安全最佳实践
- 🔐 基于环境的配置:没有硬编码凭据
- 🔒 HTTPS/TLS:所有通信均加密
- 📝 综合录井:详细的安全审计跟踪
- 🔑 许可证管理:自动刷新和安全旋转
- 🛡️ SQL清理:只读查询,防止注射
______________________________________________________________________
📊 建筑
系统架构
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ AI Assistant │◄──►│ MCP Server │◄──►│ SAP Datasphere │
│ (Claude, Cursor)│ │ 32 Tools │ │ (OAuth 2.0) │
│ │ │ Authorization │ │ │
│ │ │ Caching │ │ │
│ │ │ Telemetry │ │ │
└─────────────────┘ └──────────────────┘ └─────────────────┘核心组件
身份验证层:
auth/oauth_handler.py-令牌管理和刷新auth/datasphere_auth_connector.py-经过身份验证的API连接器auth/authorization.py-基于权限的授权auth/consent_manager.py-用户同意跟踪
安全层:
auth/input_validator.py-输入验证框架auth/sql_sanitizer.py-SQL注入预防auth/data_filter.py-PII和凭证编辑
性能层:
cache_manager.py-TTL智能缓存telemetry.py-请求跟踪和指标
MCP服务器:
sap_datasphere_mcp_server.py-主服务器,配备42个工具
______________________________________________________________________
🚀 生产部署
快速部署选项
Docker(推荐):
# Build and run
docker build -t sap-datasphere-mcp:latest .
docker run -d --name sap-mcp --env-file .env sap-datasphere-mcp:latest
# Using Docker Compose
docker-compose up -dPyPI包 (即将推出):
pip install sap-datasphere-mcp
sap-datasphere-mcpKubernetes:
# Create secrets
kubectl create secret generic sap-mcp-secrets \
--from-literal=DATASPHERE_CLIENT_ID='...' \
--from-literal=DATASPHERE_CLIENT_SECRET='...'
# Deploy
kubectl apply -f k8s/deployment.yaml
kubectl scale deployment sap-mcp-server --replicas=5手册:
git clone https://github.com/MarioDeFelipe/sap-datasphere-mcp.git
cd sap-datasphere-mcp
pip install -r requirements.txt
cp .env.example .env # Edit with your credentials
python sap_datasphere_mcp_server.py📖 看 部署.md 获取完整的生产部署指南
______________________________________________________________________
📈 性能特征
响应时间
- ⚡ 元数据查询:低于1000毫秒(缓存)
- ⚡ 目录查询:100-500ms
- ⚡ OData查询:500-2000ms(取决于数据量)
- ⚡ 令牌刷新:自动,对用户透明
缓存策略
- 📊 空间:1小时TTL
- 📦 资产:30分钟TTL
- 🔍 元数据:15分钟TTL
- 👥 用户:5分钟TTL
- 🔄 LRU驱逐:自动清理旧条目
可扩展性
- 🔄 并发请求:多个同时进行的MCP操作
- 🛡️ 错误恢复:使用指数回退自动重试
- 📊 连接池:高效的资源管理
______________________________________________________________________
🧪 测试
运行测试
# Test MCP server startup
python test_mcp_server_startup.py
# Test authorization coverage
python test_authorization_coverage.py
# Test input validation
python test_validation.py
# Test with MCP Inspector
npx @modelcontextprotocol/inspector python sap_datasphere_mcp_server.py测试结果
- ✅ 42/42个工具已注册 -所有工具定义正确
- ✅ 42/42授权工具 -已配置授权权限
- ✅ 41/42工具工作 -成功率98%
- ✅ 0个代码错误 -所有实施问题均已解决
______________________________________________________________________
📁 项目结构
sap-datasphere-mcp/
├── 📁 auth/ # Authentication & Security
│ ├── oauth_handler.py # OAuth 2.0 token management
│ ├── datasphere_auth_connector.py # Authenticated API connector
│ ├── authorization.py # Permission-based authorization
│ ├── consent_manager.py # User consent tracking
│ ├── input_validator.py # Input validation framework
│ ├── sql_sanitizer.py # SQL injection prevention
│ └── data_filter.py # PII and credential redaction
├── 📁 config/ # Configuration management
│ └── settings.py # Environment-based settings
├── 📁 docs/ # Documentation
│ ├── OAUTH_SETUP.md # OAuth setup guide
│ ├── TROUBLESHOOTING_CLAUDE_DESKTOP.md
│ └── OAUTH_IMPLEMENTATION_STATUS.md
├── 📄 sap_datasphere_mcp_server.py # Main MCP server (42 tools)
├── 📄 cache_manager.py # Intelligent caching
├── 📄 telemetry.py # Monitoring and metrics
├── 📄 mock_data_provider.py # Mock data for testing
├── 📄 .env.example # Configuration template
├── 📄 requirements.txt # Python dependencies
├── 📄 README.md # This file
└── 📄 ULTIMATE_TEST_RESULTS.md # Comprehensive test results______________________________________________________________________
🙏 致谢
此MCP服务器的构建得益于以下方面的重大贡献:
亚马逊Kiro
提供了全面的规范、架构指导和开发指导,塑造了MCP服务器的设计和实现。
克劳德代码
人工智能驱动的开发助理,为以下方面做出了贡献:
第一阶段:安全与身份验证
- OAuth 2.0实现,带有自动令牌刷新功能
- 基于权限的授权(读取、写入、管理、敏感)
- 高风险操作的用户同意流程
- 输入验证和SQL清理
- 敏感数据过滤和PII编辑
第二阶段:用户体验和人工智能交互
- 通过示例增强工具描述
- 带有恢复建议的智能错误消息
- 具有明确格式要求的参数验证
第3阶段:性能和监控
- 基于类别的TTL智能缓存
- 全面的遥测和指标
- 性能优化(缓存查询速度提高95%)
第4阶段:存储库和分析
- 存储库对象发现工具
- 分析模型访问和OData查询支持
- 元数据提取和模式发现
模拟数据修复之旅:
- 第1阶段:数据库用户管理(5/5工具)-SAP CLI集成✅
- 阶段2:neneneba API语法修复(4/4工具)-OData筛选器解决方法✅
- 第3阶段:HTML响应修复(2/2工具)-优雅降级✅
- 第4阶段:搜索解决方案(2/2个工具)-客户端搜索✅
- 成就:42.9%起→ 80% 真正的数据集成! 🎯
______________________________________________________________________
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
______________________________________________________________________
📞 支持
______________________________________________________________________
🎯 路线图
完成✅
- \[x\] OAuth 2.0身份验证,自动刷新令牌
- \[x\] 35个MCP工具的实施
- \[x\] 🎯 实现目标:80%真实数据集成(28/35个工具)
- \[x\] 授权和同意管理
- \[x\] 输入验证和SQL清理
- \[x\] 智能缓存和遥测
- \[x\] 第一阶段: 数据库用户管理(5/5工具)-SAP CLI集成
- \[x\] 第二阶段: API语法修复(4/4工具)-OData筛选器解决方法
- \[x\] 第三阶段: HTML响应修复(2/2工具)-优雅降级
- \[x\] 第四阶段: 搜索解决方法(2/2个工具)-客户端搜索
- \[x\] 使用真实的SAP Datasphere租户进行全面测试
- \[x\] 发现36+实物资产 (人力资源、财务、销售、时间维度)
- \[x\] 100%基础、目录、搜索、元数据和用户管理工具
未来的增强功能🔮
- \[\]分析工具真实数据集成(需要租户配置)
- \[\]增强的查询执行能力
- \[\]受限端点的其他权限范围
- \[\]语义搜索的矢量数据库集成
- \[\]实时事件流
- \[\]高级模式可视化
- \[\]多租户支持
- \[\]机器学习集成
______________________________________________________________________
🏆 生产就绪SAP Datasphere MCP服务器
🎯 实现的目标:28/35个具有真实数据的工具(80%)
发现36+实物资产|所有关键工具正常工作
](https://github.com/MarioDeFelipe/sap-datasphere-mcp/stargazers)   
建于❤️ 用于人工智能驱动的企业数据集成
从42.9%→ 80% 通过系统模拟数据修复实现真实数据集成!
