返回市场
sap-odata-mcp服务器

sap-odata-mcp服务器

作者:GutjahrAI5 星标更新:2025-06-27

项目介绍

SAP OData MCP 服务器

这是一个用于通过 OData REST API 将 SAP 系统与像 Claude 这样的 AI 助手集成的 Model Context Protocol (MCP) 服务器。该服务器提供了连接到 SAP OData 服务、查询实体集、执行 CRUD 操作以及调用 OData 函数的工具。

特性

  • SAP OData 连接性:通过 OData REST API 连接到 SAP 系统
  • 智能连接处理:正确处理 SAP OData URL 结构和 404 响应
  • 服务发现:自动通过目录或常见服务测试发现可用的 OData 服务
  • 实体集查询:使用过滤、排序和分页查询任何 OData 实体集
  • CRUD 操作:对 OData 实体进行创建、读取、更新和删除操作
  • 函数导入:执行 OData 函数导入和自定义函数
  • CSRF Token 处理:自动管理 CSRF Token 以确保安全操作
  • 模块化架构:干净、可维护的 TypeScript 代码库,具有关注点分离

预备条件

  • Node.js 18+
  • 启用 OData 服务的 SAP 系统
  • 访问 SAP OData 终端节点的网络权限
  • 具有适当授权的 SAP 用户凭证

⚠️ 优势:无需安装 SAP RFC SDK!使用标准 HTTP/REST API。

安装

快速设置

  1. 创建项目:
mkdir sap-odata-mcp-server
cd sap-odata-mcp-server
mkdir src
  1. 从工件复制源文件 到你的 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 类型
  2. 复制配置文件:

    • package.json - 依赖项和脚本
    • tsconfig.json - TypeScript 配置
    • .env.example - 环境变量模板
  3. 安装依赖项:

npm install
  1. 配置环境:
cp .env.example .env
# 使用你的 SAP 详细信息编辑 .env 文件
  1. 构建项目:
npm run build

配置

环境变量

创建一个 .env 文件,包含你的 SAP 系统详细信息:

# 必要的 SAP OData 配置
SAP_ODATA_BASE_URL=https://your-sap-host:8000/sap/opu/odata/sap/
SAP_USERNAME=your-sap-username
SAP_PASSWORD=your-sap-password

# 可选配置
SAP_CLIENT=1
SAP_TIMEOUT=30000
SAP_VALIDATE_SSL=false  # 开发时使用自签名证书
SAP_ENABLE_CSRF=true

Claude Desktop 集成

添加到你的 Claude Desktop 配置文件中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %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": "1",
        "SAP_VALIDATE_SSL": "false"
      }
    }
  }
}

可用工具

1. sap_connect

连接到 SAP OData 服务。

参数:

  • baseUrl(必需):SAP OData 服务基础 URL
  • username(必需):SAP 用户名
  • password(必需):SAP 密码
  • client(可选):SAP 客户编号
  • timeout(可选):请求超时时间(毫秒,默认值:30000)
  • validateSSL(可选):验证 SSL 证书(默认值:true)
  • enableCSRF(可选):启用 CSRF Token 处理(默认值: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 排序表达式
  • top(可选):返回记录数
  • skip(可选):跳过的记录数
  • expand(可选):扩展导航属性

5. sap_get_entity

根据其键值获取特定实体。

参数:

  • serviceName(必需):OData 服务名称
  • entitySet(必需):实体集名称
  • keyValues(必需):实体键的键值对对象

6. sap_create_entity

在实体集中创建新实体。

7. sap_update_entity

更新现有实体。

8. sap_delete_entity

删除实体。

9. sap_call_function

调用 OData 函数导入。

10. sap_connection_status

检查当前 SAP OData 连接状态。

11. sap_disconnect

断开与 SAP OData 服务的连接。

使用示例

使用 Claude 开始

配置完成后,你可以使用自然语言在 Claude 中与 SAP 进行交互:

连接到 SAP:

连接到位于 https://sap-host:8000/sap/opu/odata/sap/ 的 SAP OData 服务,使用用户名 DEVELOPER 和密码 mypassword

发现可用的服务:

获取可用的 OData 服务列表

获取服务信息:

获取服务 GWSAMPLE_BASIC 的元数据

查询数据:

从 GWSAMPLE_BASIC 查询 BusinessPartnerSet,选择 BusinessPartnerID 和 CompanyName,返回前 10 条记录

高级过滤:

从 ZSD_SALES_SRV 查询 SalesOrderSet,按 CreationDate 大于等于 2024-01-01T00:00:00 过滤,按 CreationDate 降序排列,返回前 20 条记录

获取特定记录:

从 ZMM_MATERIAL_SRV 的 MaterialSet 获取键值 Material = '000000000000000001' 的实体

创建新记录:

在 CustomerSet 中创建实体,数据为:{"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,MaterialSalesData

SAP 系统要求

必需的 SAP 组件

  • SAP NetWeaver 7.0 或更高版本
  • 激活了 SAP Gateway 组件
  • 启用了 OData 服务并进行了配置

必需的 SAP 授权

SAP 用户需要以下授权对象:

  • S_SERVICE:OData 终端节点的服务授权
  • S_ICF:Internet Communication Framework 授权
  • S_TCODE:BAPI 的事务授权(如果使用函数导入)

激活 OData 服务

  1. 事务 SICF:在 /sap/opu/odata 激活 ICF 服务
  2. 事务 /IWFND/MAINT_SERVICE:管理和激活 OData 服务
  3. 事务 /IWFND/GW_CLIENT:测试 OData 服务调用

架构

模块化设计

src/
├── index.ts              # 入口点 - 启动服务器
├── server.ts             # MCP 服务器设置和请求路由
├── handlers.ts           # 每个工具的业务逻辑
├── odata-client.ts       # SAP OData HTTP 客户端
├── tool-definitions.ts   # MCP 工具模式
└── types.ts              # TypeScript 类型定义

关键特性

  • 智能连接测试:处理 SAP 的 URL 结构,其中基础 URL 返回 404
  • 服务发现:多种方法查找可用的 OData 服务
  • 错误处理:全面的错误处理,附带有用的提示信息
  • 类型安全性:完整的 TypeScript 支持,具有正确的接口
  • CSRF 保护:写操作的自动 CSRF Token 管理

故障排除

常见问题

连接被拒绝(网络错误)

  • 验证 SAP 系统是否运行且可访问
  • 检查 SAP_ODATA_BASE_URL 中的主机名/端口
  • 验证防火墙设置允许 HTTP/HTTPS 流量

401 未授权

  • 检查 SAP_USERNAME 和 SAP_PASSWORD
  • 验证用户账户未被锁定
  • 确保用户具有 S_SERVICE 授权

403 禁止

  • 检查用户是否有必要的 SAP 授权
  • 验证 S_ICF 授权针对 OData 路径
  • 联系 SAP 管理员审查权限

404 未找到

  • 对于没有服务名称的 SAP OData 基础 URL,这是正常的
  • 验证 OData 服务已激活(SICF 事务)
  • 使用服务发现查找可用服务

SSL 证书错误

  • 开发时设置 SAP_VALIDATE_SSL=false
  • 生产环境中安装适当的证书
  • 检查证书链和过期日期

调试模式

启用详细日志:

DEBUG=axios npm start

SAP 系统验证

  1. 在浏览器中测试 OData URL:导航到你的 SAP OData URL
  2. 检查服务激活:事务 SICF → /sap/opu/odata
  3. 验证网关服务:事务 /IWFND/MAINT_SERVICE
  4. 使用网关客户端测试:事务 /IWFND/GW_CLIENT

安全最佳实践

生产部署

  • 使用 HTTPS 进行所有 SAP OData 连接
  • 安全存储凭证 - 不要硬编码密码
  • 创建专用服务用户,具有最小权限
  • 启用 CSRF 保护 对于写操作
  • 在 SAP 中实现适当的授权 对于 OData 服务
  • 监控访问日志 并设置警报
  • 定期进行用户权限的安全审计

网络安全

  • 使用 VPN 或私有网络 访问 SAP
  • 实施 IP 限制 在可能的情况下
  • 启用 SAP Gateway 安全功能
  • 使用适当的证书管理

常见的 SAP OData 服务

标准 SAP 服务

  • GWSAMPLE_BASIC - 测试的基本样本服务
  • GWDEMO - 综合演示服务
  • RMTSAMPLEFLIGHT - 飞行预订演示

业务服务

  • API_MATERIAL_SRV - 物料管理
  • API_BUSINESS_PARTNER - 商业伙伴管理
  • API_SALES_ORDER_SRV - 销售订单管理
  • API_PURCHASEORDER_PROCESS_SRV - 采购订单处理

模块中的实体集

  • MM (物料管理):MaterialSet, MaterialPlantDataSet
  • SD (销售与分销):SalesOrderSet, CustomerSet, PricingConditionSet
  • FI (财务会计):GeneralLedgerEntrySet, AccountingDocumentSet
  • HR (人力资源):EmployeeSet, OrganizationalUnitSet

开发

可用脚本

# 构建 TypeScript
npm run build

# 启动生产服务器
npm start

# 开发模式,自动重新加载
npm run dev

# 代码质量
npm run lint
npm run format

添加新功能

  1. tool-definitions.ts 中添加工具定义
  2. handlers.ts 中实现处理器
  3. server.ts 的 switch 语句中添加路由
  4. 如有必要,在 types.ts 中更新类型
  5. 构建并测试

贡献

  1. 分叉仓库
  2. 创建功能分支
  3. 使用适当的 TypeScript 类型进行更改
  4. 使用真实的 SAP 系统进行测试
  5. 提交拉取请求

许可证

MIT 许可证 - 详情参见 LICENSE 文件。