产品数据MCP服务器

通过将SAP S/4HANA Cloud的OData API_PRODUCT_SRV暴露为动态模型上下文协议(MCP)工具,实现与产品数据的自然语言交互。

  • by smrepo
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 smrepo/sap-mcp

使用说明

SAP S/4HANA公有云:产品数据MCP服务器

🎯 项目目标

通过以下方式改变您的互动 SAP S/4HANA云 通过公开OData来获取产品数据 API_PRODUCT_SRV 作为一个动态 模型上下文协议(MCP) 工具。这允许与您的产品数据进行自然语言交互,无需SAP Joule许可证或设置:

  • “显示系统中排名前10的产品” → 使用以下命令自动查询产品实体 $top=10
  • “获取一般产品详细信息列表” → 从SAP沙盒中检索实时数据
  • “给我50条记录的样本” → 优化了OData检索 $inlinecount

🧩 架构概述

与复杂的JDBC包装器或多跳BTP架构不同,此服务器利用 Python原生FastMCP 实现直接、轻量级连接的方法。

核心组件:

  • 🔌 MCP协议层: 建立在 mcp.server.fastmcp,通过以下方式确保低延迟通信 stdio.
  • 🌐 OData集成: 直接HTTP GET 向SAP S/4HANA云沙盒发送请求。

方法优势:

  • 无需SQL: 直接与SAP的原生OData结构交互。
  • 沙盒就绪: 初始测试不需要复杂的SAP BTP或Cloud Connector设置。
  • 上下文高效: 返回专门为LLM消费格式化的结构化JSON。

✨ 主要特点

🎨 OData的自然语言

  • 智能查询翻译: AI代理将自然语言意图(例如,“给我看一些产品”)转换为精确的函数参数(top_count).
  • 安全限制: 自动强制执行SAP沙盒限制(最多50条记录)以防止API节流。

🚀 生产就绪逻辑

  • 错误处理: 健壮 try/catch 围绕HTTP请求的块,并向AI报告结构化错误。
  • 标准保护: 自定义日志配置将调试信息定向到 stderr,保持 stdout 纯JSON-RPC协议完整性。
  • OData V2/V4兼容性: 逻辑处理两者 d/results (V2)和 value (V4)JSON响应结构。

🏛️ 系统架构

graph LR
    A[🤖 AI Agent] <-->|Stdio / JSON-RPC| B[🐍 SAP MCP Server]
    B <-->|HTTPS / OData| C[☁️ SAP S/4HANA Sandbox]
    
    subgraph "Local Machine"
    A
    B
    end
    
    subgraph "SAP Ecosystem"
    C
    end

💡 用例

📈 产品目录发现

用户: “系统中列出了哪些产品?给我举5个例子。”

  • 工具: get_sap_products
  • 逻辑: 获取一个小样本,以允许LLM推断模式和产品类型。

📊 数据采样

用户: “下载允许的最大数量的产品进行分析。”

  • 工具: get_sap_products
  • 逻辑: 使用调用API top_count=50 (沙盒限制)。

🛠️ 安装和设置

先决条件

  • Python 3.10 或更高
  • 点 或 紫外线 (推荐)
  • 公共沙盒API密钥
  • Claude桌面应用程序

安装指南

  1. 克隆存储库:

    git clone https://github.com/smrepo/sap-mcp
    cd sap-mcp
    
  2. 安装依赖关系:

    pip install mcp requests
    
  3. 验证脚本: 确保 sap_mcp_server.py 在目录中。


⚙️ 配置(克劳德桌面)

要将此服务器与Claude Desktop一起使用,您必须将其添加到您的 claude_desktop_config.json 文件。

视窗

地点: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "sap-product-info": {
      "command": "python",
      "args": [
        "C:\\Absolute\\Path\\To\\Your\\Repo\\sap_mcp_server.py"
      ]
    }
  }
}