SAP OData MCP服务器
一个模型上下文协议(MCP)服务器,用于使用OData REST API将SAP系统与Claude等AI助手集成。此服务器提供用于连接到SAP OData服务、查询实体集、执行CRUD操作和调用OData函数的工具。
特性
- SAP OData连接:通过OData REST API连接到SAP系统
- 智能连接处理:正确处理SAP OData URL结构和404响应
- 服务发现:通过目录或公共服务测试自动发现可用的OData服务
- 实体集查询:查询任何具有过滤、排序和分页功能的OData实体集
- CRUD操作:对OData实体执行创建、读取、更新和删除操作
- 函数导入:执行OData函数导入和自定义函数
- CSRF令牌处理:用于安全操作的自动CSRF令牌管理
- 模块化架构:干净、可维护的TypeScript代码库,关注点分离
先决条件
- Node.js 18+
- 启用OData服务的SAP系统
- SAP OData端点的网络访问
- 具有适当授权的SAP用户凭据
⚠️ 优势:不需要安装SAP RFC SDK!使用标准HTTP/REST API。
安装
快速设置
- 创建项目:
mkdir sap-odata-mcp-server
cd sap-odata-mcp-server
mkdir src- 复制源文件 从文物到你的
src/目录:
- src/index.ts -入口点 - src/server.ts -MCP服务器设置 - src/handlers.ts -请求处理程序 - src/odata-client.ts SAP OData 客户端 - src/tool-definitions.ts -工具定义 - src/types.ts -TypeScript类型
- 复制配置文件:
- package.json -依赖关系和脚本 - tsconfig.json -TypeScript配置 - .env.example -环境变量模板
- 安装依赖项:
npm install- 配置环境:
cp .env.example .env
# Edit .env with your SAP details- 构建项目:
npm run build配置
环境变量
创建一个 .env 包含SAP系统详细信息的文件:
# Required SAP OData Configuration
SAP_ODATA_BASE_URL=https://your-sap-host:8000/sap/opu/odata/sap/
SAP_USERNAME=your-sap-username
SAP_PASSWORD=your-sap-password
# Optional Configuration
SAP_CLIENT=100
SAP_TIMEOUT=30000
SAP_VALIDATE_SSL=false # for development with self-signed certificates
SAP_ENABLE_CSRF=trueClaude桌面集成
添加到您的Claude Desktop配置文件中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json\ 视窗: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"sap-odata": {
"command": "node",
"args": ["/full/path/to/your/sap-odata-mcp-server/dist/index.js"],
"env": {
"SAP_ODATA_BASE_URL": "https://your-sap-host:8000/sap/opu/odata/sap/",
"SAP_USERNAME": "your-username",
"SAP_PASSWORD": "your-password",
"SAP_CLIENT": "100",
"SAP_VALIDATE_SSL": "false"
}
}
}
}可用工具
1.sap_connect
连接到SAP OData服务。
参数:
baseUrl(必需):SAP OData服务基础URLusername(必填):SAP用户名password(必填):SAP密码client(可选):SAP客户端号timeout(可选):请求超时(毫秒)(默认值:30000)validateSSL(可选):验证SSL证书(默认值:true)enableCSRF(可选):启用CSRF令牌处理(默认值:true)
2.sap_get_services
获取具有智能发现的可用OData服务列表。
3.sap_get_service_metadata
获取特定OData服务的元数据。
参数:
serviceName(必需):OData服务的名称
4.sap_query_entity_set
使用过滤、排序和分页查询OData实体集。
参数:
serviceName(必需):OData服务的名称entitySet(必填):实体集的名称select(可选):要选择的字段数组filter(可选):OData筛选器表达式orderby(可选):OData orderby表达式top(可选):要返回的记录数skip(可选):要跳过的记录数expand(可选):要展开的导航属性
5.sap_get_实体
通过键值获取特定实体。
参数:
serviceName(必需):OData服务的名称entitySet(必填):实体集的名称keyValues(必需):具有实体键的键值对的对象
6.sap_create_entity
在实体集中创建新实体。
7.sap_update_entity
更新现有实体。
8.sap_delete_entity
删除实体。
9.sap_call_function
调用OData函数导入。
10.连接状态
检查当前SAP OData连接状态。
11.sap_断开连接
断开与SAP OData服务的连接。
使用示例
克劳德入门
配置后,您可以使用Claude中的自然语言与SAP交互:
连接到SAP:
Connect to SAP OData service at https://sap-host:8000/sap/opu/odata/sap/ using username DEVELOPER and password mypassword发现可用服务:
Get list of available OData services获取服务信息:
Get metadata for service GWSAMPLE_BASIC查询数据:
Query BusinessPartnerSet from GWSAMPLE_BASIC, select BusinessPartnerID and CompanyName, top 10高级筛选:
Query SalesOrderSet from ZSD_SALES_SRV, filter by CreationDate ge datetime'2024-01-01T00:00:00', order by CreationDate desc, top 20获取具体记录:
Get entity from MaterialSet in ZMM_MATERIAL_SRV with key Material = '000000000000000001'创建新记录:
Create entity in CustomerSet with data: {"CustomerNumber": "1000", "CustomerName": "Test Customer", "Country": "US"}OData查询示例
过滤:
$filter=MaterialType eq 'FERT' and CreationDate ge datetime'2024-01-01T00:00:00'选择字段:
$select=Material,MaterialDescription,MaterialType,BaseUnit排序:
$orderby=CreationDate desc,Material asc分页:
$top=50&$skip=100展开导航属性:
$expand=MaterialPlantData,MaterialSalesDataSAP系统要求
所需SAP组件
- SAP NetWeaver 7.0或更高版本
- SAP网关组件已激活
- 已启用和配置OData服务
所需的SAP授权
SAP用户需要这些授权对象:
- S_服务:OData终结点的服务授权
- S_ICF:互联网通信框架授权
- S_TCODE:BAPI的交易授权(如果使用功能导入)
激活OData服务
- 交易SICF:在以下网址激活ICF服务
/sap/opu/odata - 交易 /IWFND/MAINT_SERVICE:管理和激活OData服务
- 交易/IWFND/GW_CLIENT:测试OData服务调用
建筑
模块化设计
src/
├── index.ts # Entry point - starts the server
├── server.ts # MCP server setup and request routing
├── handlers.ts # Business logic for each tool
├── odata-client.ts # SAP OData HTTP client
├── tool-definitions.ts # MCP tool schemas
└── types.ts # TypeScript type definitions主要特点
- 智能连接测试:处理SAP的URL结构,其中基本URL返回404
- 服务发现:查找可用OData服务的多种方法
- 错误处理:全面的错误处理和有用的消息
- 类型安全:具有适当接口的完全TypeScript支持
- CSRF保护:写入操作的自动CSRF令牌管理
故障排除
常见问题
连接被拒绝(网络错误)
- 验证SAP系统是否正在运行且可访问
- 检查SAP_ODATA_BASE_URL中的主机名/端口
- 验证防火墙设置是否允许HTTP/HTTPS流量
401未经授权
- 查看SAP_USERNAME和SAP_PASSWORD
- 验证用户帐户是否未锁定
- 确保用户具有S_SERVICE授权
403禁止
- 检查用户是否需要SAP授权
- 验证OData路径的S_ICF授权
- 联系SAP管理员进行权限审核
404未找到
- 对于没有服务名称的SAP OData基本URL来说,这是正常的
- 验证OData服务是否已激活(SICF事务)
- 使用服务发现查找可用服务
SSL证书错误
- 集
SAP_VALIDATE_SSL=false为了发展 - 安装适当的生产证书
- 检查证书链和过期时间
调试模式
启用详细日志记录:
DEBUG=axios npm startSAP系统验证
- 在浏览器中测试OData URL:导航到您的SAP OData URL
- 检查服务激活:交易SICF→
/sap/opu/odata - 验证网关服务交易 /IWFND/MAINT_SERVICE
- 使用网关客户端进行测试:交易/IWFND/GW_CLIENT
安全最佳实践
生产部署
- 使用HTTPS 适用于所有SAP OData连接
- 安全地存储凭据 -从不硬编码密码
- 创建专门的服务用户 具有最低限度的所需权限
- 启用CSRF保护 用于写入操作
- 实施适当的授权 SAP for OData服务
- 监控访问日志 并设置警报
- 定期安全审计 用户权限
网络安全
- 使用VPN或专用网络 用于SAP访问
- 实施IP限制 在可能的情况下
- 启用SAP网关安全 特征
- 使用适当的证书管理
常见SAP OData服务
标准SAP服务
- GWSAMPLE_BASIC -测试基本样品服务
- GWDEMO -全面的演示服务
- rmt示例飞行 -航班预订演示
商业服务
- API_MATERIAL_SRV程序 -物料管理
- API_业务_合作伙伴 -业务伙伴管理
- API_SALES_ORDER_SRV -销售订单管理
- API_PURCHASEORDER_PROCESS_SSRV程序 -采购订单处理
按模块设置的实体
- MM(材料管理):MaterialSet、MaterialPlantDataSet
- SD(销售与分销):销售订单集、客户集、定价条件集
- FI(财务会计):总账条目集、会计文档集
- HR(人力资源):员工集、组织单位集
发展
可用脚本
# Build TypeScript
npm run build
# Start production server
npm start
# Development mode with auto-reload
npm run dev
# Code quality
npm run lint
npm run format添加新功能
- 添加工具定义 在……里面
tool-definitions.ts - 机具处理程序 在……里面
handlers.ts - 添加路由 在……里面
server.tsswitch语句 - 更新类型 在……里面
types.ts如有需要 - 构建和测试
贡献
- 分叉存储库
- 创建要素分支
- 使用正确的TypeScript类型进行更改
- 使用真实的SAP系统进行测试
- 提交拉取请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
