这是一个用于通过 OData REST API 将 SAP 系统与像 Claude 这样的 AI 助手集成的 Model Context Protocol (MCP) 服务器。该服务器提供了连接到 SAP OData 服务、查询实体集、执行 CRUD 操作以及调用 OData 函数的工具。
⚠️ 优势:无需安装 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
# 使用你的 SAP 详细信息编辑 .env 文件
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 配置文件中:
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"
}
}
}
}
连接到 SAP OData 服务。
参数:
baseUrl(必需):SAP OData 服务基础 URLusername(必需):SAP 用户名password(必需):SAP 密码client(可选):SAP 客户编号timeout(可选):请求超时时间(毫秒,默认值:30000)validateSSL(可选):验证 SSL 证书(默认值:true)enableCSRF(可选):启用 CSRF Token 处理(默认值:true)获取可用的 OData 服务列表,带有智能发现。
获取特定 OData 服务的元数据。
参数:
serviceName(必需):OData 服务名称使用过滤、排序和分页查询 OData 实体集。
参数:
serviceName(必需):OData 服务名称entitySet(必需):实体集名称select(可选):选择字段数组filter(可选):OData 过滤表达式orderby(可选):OData 排序表达式top(可选):返回记录数skip(可选):跳过的记录数expand(可选):扩展导航属性根据其键值获取特定实体。
参数:
serviceName(必需):OData 服务名称entitySet(必需):实体集名称keyValues(必需):实体键的键值对对象在实体集中创建新实体。
更新现有实体。
删除实体。
调用 OData 函数导入。
检查当前 SAP OData 连接状态。
断开与 SAP OData 服务的连接。
配置完成后,你可以使用自然语言在 Claude 中与 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"}
$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/opu/odata 激活 ICF 服务src/
├── index.ts # 入口点 - 启动服务器
├── server.ts # MCP 服务器设置和请求路由
├── handlers.ts # 每个工具的业务逻辑
├── odata-client.ts # SAP OData HTTP 客户端
├── tool-definitions.ts # MCP 工具模式
└── types.ts # TypeScript 类型定义
SAP_VALIDATE_SSL=false启用详细日志:
DEBUG=axios npm start
/sap/opu/odata# 构建 TypeScript
npm run build
# 启动生产服务器
npm start
# 开发模式,自动重新加载
npm run dev
# 代码质量
npm run lint
npm run format
tool-definitions.ts 中添加工具定义handlers.ts 中实现处理器server.ts 的 switch 语句中添加路由types.ts 中更新类型MIT 许可证 - 详情参见 LICENSE 文件。