OData到MCP转换服务

将SAP S/4HANA或ECC系统的OData服务转换为动态MCP工具,实现自然语言交互的ERP数据操作。

  • by handeocakk
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 handeocakk/mcp

使用说明

SAP OData到MCP服务器的BTP🚀

🎯 项目目标

将您的SAP S/4HANA或ECC系统转换为 对话式人工智能界面 通过将所有OData服务作为动态MCP工具公开。这使您能够与ERP数据进行自然语言交互:

  • “给我看看10家银行” → 自动查询$top=10的银行实体
  • “将ID为1的银行更新为街道号5” → 对银行实体执行PATCH操作
  • “创建一个名为John Doe的新客户” → 向客户实体执行POST
  • “列出本周的所有采购订单” → 对PurchaseOrder实体的日期范围应用$filter

🏗️ 架构概述

graph TB
    A[AI Agent/LLM] --> B[MCP Client]
    B --> C[SAP MCP Server]
    C --> D[SAP BTP Destination]
    D --> E[SAP SAP System]
    
    C --> F[Dynamic Service Discovery]
    F --> G[OData Catalog API]
    C --> H[CRUD Tool Generation]
    H --> I[Entity Metadata Parser]
    
    style A fill:#e1f5fe
    style C fill:#f3e5f5
    style E fill:#e8f5e8

核心组件:

  1. 🔍 服务发现引擎:自动从SAP发现所有可用的OData服务
  2. ⚙️ 动态工具生成器:为每个发现的实体创建用于CRUD操作的MCP工具
  3. 🔌 MCP协议层:完全符合MCP 2025-06-18规范
  4. 🌐 HTTP传输:用于web应用程序的基于会话的流式HTTP
  5. 🔐 BTP集成:通过SAP BTP目标服务实现无缝身份验证

✨ 主要特点

🎨 OData的自然语言

  • 智能查询翻译:将自然语言转换为适当的OData查询
  • 上下文感知操作:了解实体关系和约束
  • 参数推断:自动将用户意图映射到工具参数

🔄 动态CRUD操作

  • 读取操作:具有过滤、排序和分页功能的实体集
  • 创建操作:创建新实体并进行验证
  • 更新操作:部分和全部实体更新
  • 删除操作:安全实体删除并确认

🚀 生产准备就绪

  • 会话管理:自动创建和清理会话
  • 错误处理:通过用户友好的消息进行全面的错误处理
  • 日志记录:调试和监控的详细日志记录
  • 安全:DNS重新绑定保护、CORS、头盔安全

📊 实时元数据

  • 服务目录:实时发现可用服务
  • 实体架构:从OData元数据生成动态架构
  • 能力检测:自动检测每个实体的CRUD功能

🏛️ 系统架构

┌─────────────────────┐    ┌───────────────────────────┐    ┌─────────────────────┐
│                     │    │                           │    │                     │
│   🤖 AI Agent       │    │   🖥️  SAP MCP Server     │    │   🏢 SAP            │
│   - Claude          │◄──►│   - Service Discovery     │◄──►│   - OData Services  │
│   - GPT-4           │    │   - CRUD Tool Registry    │    │   - Business Logic  │
│   - Local LLMs      │    │   - Session Management    │    │   - Master Data     │
│                     │    │   - BTP Authentication    │    │                     │
└─────────────────────┘    └───────────────────────────┘    └─────────────────────┘
                                           │                                       
                                           ▼                                       
                           ┌───────────────────────────┐                          
                           │                           │                          
                           │   ☁️  SAP BTP Platform    │                          
                           │   - Destination Service   │                          
                           │   - Connectivity Service  │                          
                           │   - XSUAA Security        │                          
                           │                           │                          
                           └───────────────────────────┘                          

🎯 用例

📈 商业智能查询

User: "Show me top 10 customers by revenue this quarter"
→ Tool: r-CustomerService-Customer
→ Parameters: $filter, $orderby, $top

📝 数据维护

User: "Update supplier ABC123 to have status 'Active'"
→ Tool: u-SupplierService-Supplier
→ Parameters: SupplierId="ABC123", Status="Active"

📊 分析见解

User: "How many open purchase orders are there?"
→ Tool: r-PurchaseOrderService-PurchaseOrder
→ Parameters: $filter=Status eq 'Open'&$count=true

🔧 系统管理

User: "List all inactive users in the system"
→ Tool: r-UserService-User
→ Parameters: $filter=Status eq 'Inactive'

🛠️ 安装和设置

先决条件

  • Node.js 18.x或更高版本
  • 启用OData服务的SAP S/4HANA或ECC系统
  • SAP BTP帐户,提供目标和连接服务
  • 用于定制的TypeScript知识

🚀 用法示例

自然语言查询

MCP服务器会自动将这些自然语言命令转换为相应的工具调用:

自然语言 生成的工具调用 OData 查询
“给我看看10家银行” r-BankService-Bank GET /BankSet?$top=10
“在德国寻找银行” r-BankService-Bank GET /BankSet?$filter=Country eq 'DE'
“将123银行名称更新为ABC公司” u-BankService-Bank PATCH /BankSet('123')
“创建新客户John Doe” c-CustomerService-Customer POST /CustomerSet
“删除订单456” d-OrderService-Order DELETE /OrderSet('456')

📋 可用工具

工具命名约定

{operationAbbreviation}-{serviceId}-{entityName}

操作缩写为:

  • r: 读取(查询实体或获取单个实体)
  • c: create(创建新实体)
  • u: 更新(更新现有实体)
  • d: delete(删除实体)

示例:

  • r-API_BUSINESS_合作伙伴-业务合作伙伴
  • c-API_CUSTOMER_MATERIAL_SRV客户材料
  • u-API_SALES_ORDER_SRV-SALES订单
  • d-API_SALES_ORDER_SRV-SALES订单

CRUD操作

协议版本: 2025-06-18

支持的功能:

  • ✅ 工具 随着 listChanged 通知
  • ✅ 资源 随着 listChanged 通知
  • ✅ 日志记录 带液位控制
  • ✅ 会话管理 用于HTTP传输
  • ✅ 错误处理 带有正确的错误代码

运输支持

  • ✅ 流式HTTP (推荐)
  • ✅ 工作室 用于命令行使用
  • ✅ 基于会话 具有自动清理功能
  • ✅ DNS重新绑定保护

🔒 安全和身份验证

SAP BTP集成

  • 使用BTP目标服务进行S/4HANA或ECC身份验证
  • 支持主体传播和OAuth2
  • 自动令牌刷新和会话管理
  • BTP中的安全凭据存储

HTTP安全

  • Helmet.js安全标头
  • 具有可配置源的CORS保护
  • DNS重新绑定攻击防御
  • 请求速率限制(可配置)

会话安全

  • 自动会话过期(默认24小时)
  • 安全会话ID生成
  • 服务器重启时的会话清理
  • 内存泄漏预防

📚 api参考

健康检查

GET /health
{
  "status": "healthy",
  "activeSessions": 3,
  "discoveredServices": 25,
  "version": "2.0.0"
}

察看连接信息

GET /mcp
{
  "name": "btp-sap-odata-to-mcp-server",
  "protocol": { "version": "2025-06-18" },
  "capabilities": { "tools": {}, "resources": {} },
  "features": ["Dynamic service discovery", "CRUD operations"],
  "activeSessions": 3
}

文档

GET /docs
{
  "title": "SAP MCP Server API",
  "endpoints": {...},
  "mcpCapabilities": {...},
  "usage": {...}
}

🎬 演示

查看MCP服务器的运行情况:

⚙️ 环境变量:禁用ReadEntity工具注册

要禁用所有服务中所有实体的ReadEntity工具注册,请在您的 .env 文件:

DISABLE_READ_ENTITY_TOOL=true

这将阻止所有实体和服务注册ReadEntity工具。

⚡ 快速开始

  • 有关本地开发和测试,请参阅 LOCAL_RUN.md
  • 有关部署到SAP BTP的信息,请参阅 部署.md