MCP SAP GUI Server

MCP SAP GUI Server

使用模型上下文协议自动执行与 SAP GUI 的交互,从而可以通过点击、键入、滚动和事务管理等工具精确控制 SAP 事务。

操作系统自动化
访问服务器

README

MCP SAP GUI 服务器

用于 SAP GUI 自动化的模型上下文协议 (MCP) 服务器。此服务器提供工具来自动化与 SAP GUI 的交互,从而实现对 SAP 事务的程序化控制。

image

要求

  • Python 3.8 或更高版本
  • 已安装并配置的 SAP GUI
  • 有效的 SAP 凭据(系统、客户端、用户、密码)
  • Node.js (用于 npx)

安装

  1. 克隆 github 文件夹并使用安装脚本运行自动安装:
setup.bat

这将引导您完成构建过程,如果选择,将直接将其集成到 Cline 或 Roo 中。

  1. 或者使用构建脚本手动安装..:
build.bat
  1. 配置 SAP 凭据:
  • 复制 .env.example.env
  • 使用您的 SAP 凭据更新值
  1. 使用 mcp inspector 测试服务器:
run.bat debug
  1. 使用集成脚本自动配置 MCP 设置:
integrate.bat cline  # 为 Cline 配置
integrate.bat roo    # 为 Roo 配置

该脚本将:

  • 自动确定正确的设置文件路径
  • 在进行任何更改之前创建备份
  • 安全地更新 MCP 配置
  • 验证更改以防止损坏

手动配置(如果需要):

    "mcp-sap-gui": {
      "command": "python",
      "args": [
        "-m",
        "sap_gui_server.server"
      ],
      "cwd": "PATH_TO_YOUR_FOLDER/mcp-sap-gui",
      "disabled": false,
      "autoApprove": []
    }
  1. 使用此提示向您的 AI 模型解释该工具:
**重要安全提示:**
SAP 是一个高度敏感的系统,不正确的交互可能会产生严重的后果。 必须以最精确和谨慎的态度执行每一个操作。 如果对任何操作有疑问,请立即停止并请求用户协助。

**可用工具:**
`mcp-sap-gui` 服务器提供用于 SAP GUI 交互的工具:
* `launch_transaction`: 启动新事务
* `sap_click`: 在特定坐标处单击
* `sap_move_mouse`: 将鼠标移动到坐标
* `sap_type`: 在字段中输入文本
* `end_transaction`: 关闭当前事务

**技术限制和要求:**
1. 每次操作后,您只会收到 SAP GUI 窗口的屏幕截图图像
2. 无法直接访问屏幕元素元数据或技术表示
3. 您必须使用图像识别来:
   * 识别 UI 元素(字段、按钮等)
   * 确定交互的精确 x/y 坐标
   * 验证元素大小和位置
4. 所有坐标必须精确 - 不可接受近似点击

**分步流程:**
1. 启动 SAP GUI 会话:
   * 使用所需的事务代码调用 `launch_transaction`
   * 仔细分析返回的屏幕截图
2. 与屏幕交互:
   * 使用图像识别来识别所需的元素
   * 计算交互的精确坐标
   * 执行适当的操作(`sap_click`、`sap_type` 等)
   * 在下一个屏幕截图中验证结果
3. 捕获屏幕截图:
   * 在流程的关键点保存屏幕截图
4. 结束会话:
   * 完成后调用 `end_transaction`

**最佳实践:**
1. 始终在任何操作之前验证屏幕状态
2. 在单击之前仔细检查坐标
3. 使用清晰的注释记录每个步骤
4. 如果不确定任何元素的位置,请请求用户验证
5. 保持一致的屏幕截图命名约定

可用工具

MCP SAP GUI 服务器提供以下用于 SAP 自动化的工具:

事务管理

  • launch_transaction: 启动特定的 SAP 事务代码
  • end_transaction: 结束当前的 SAP 事务

界面交互

  • sap_click: 在 SAP GUI 窗口中的特定坐标处单击
  • sap_move_mouse: 将鼠标光标移动到特定坐标
  • sap_type: 在当前光标位置键入文本
  • sap_scroll: 滚动 SAP GUI 屏幕(向上/向下)

屏幕截图捕获

  • save_last_screenshot: 保存 SAP GUI 窗口的最后捕获的屏幕截图。 返回已保存图像的绝对文件路径。

屏幕截图返回格式

所有与 SAP GUI 窗口交互的工具(launch_transaction、sap_click、sap_move_mouse、sap_type、sap_scroll)都支持由 return_screenshot 参数控制的不同屏幕截图返回格式:

  1. none (默认): 仅返回成功/错误消息
{
    "type": "text",
    "text": "Status: success"
}
  1. as_file: 将屏幕截图保存到指定的目标文件夹并返回路径
{
    "type": "text",
    "text": "Screenshot saved as C:/path/to/file/screenshot.png"
}

注意:使用 as_file 时,必须使用 as_file_target_folder 参数指定目标文件夹。 如果该文件夹不存在,则将创建该文件夹。

  1. as_base64: 返回原始 base64 字符串
{
    "type": "text",
    "text": "base64_encoded_string_here"
}
  1. as_imagecontent: 返回 MCP ImageContent 对象
{
    "type": "image",
    "data": "base64_encoded_string_here",
    "mimeType": "image/png"
}
  1. as_imageurl: 返回带有数据 URL 的嵌入式资源
{
    "type": "resource",
    "resource": {
        "uri": "application:image",
        "mimeType": "image/png",
        "text": "data:image/png;base64,..."
    }
}

用法示例:

# 默认 - 无屏幕截图
result = await client.call_tool("launch_transaction", {
    "transaction": "VA01"
})

# 保存到特定文件夹
result = await client.call_tool("launch_transaction", {
    "transaction": "VA01",
    "return_screenshot": "as_file",
    "as_file_target_folder": "C:/screenshots"
})

# 获取 base64 字符串
result = await client.call_tool("launch_transaction", {
    "transaction": "VA01",
    "return_screenshot": "as_base64"
})

工具参数摘要:

工具 参数 类型 默认 描述
launch_transaction transaction string 要启动的 SAP 事务代码(例如,VA01、ME21N、MM03)
return_screenshot string none 屏幕截图返回格式(noneas_fileas_base64as_imagecontentas_imageurl
as_file_target_folder string 使用 'as_file' 返回格式时保存屏幕截图的目标文件夹路径
sap_click x integer 应发生点击的水平像素坐标 (0-1920)
y integer 应发生点击的垂直像素坐标 (0-1080)
return_screenshot string none 屏幕截图返回格式(noneas_fileas_base64as_imagecontentas_imageurl
as_file_target_folder string 使用 'as_file' 返回格式时保存屏幕截图的目标文件夹路径
sap_move_mouse x integer 将光标移动到的水平像素坐标 (0-1920)
y integer 将光标移动到的垂直像素坐标 (0-1080)
return_screenshot string none 屏幕截图返回格式(noneas_fileas_base64as_imagecontentas_imageurl
as_file_target_folder string 使用 'as_file' 返回格式时保存屏幕截图的目标文件夹路径
sap_type text string 在 SAP GUI 窗口中的当前光标位置输入的文本
return_screenshot string none 屏幕截图返回格式(noneas_fileas_base64as_imagecontentas_imageurl
as_file_target_folder string 使用 'as_file' 返回格式时保存屏幕截图的目标文件夹路径
sap_scroll direction string 滚动屏幕的方向('up' 向上移动内容,'down' 向下移动内容)
return_screenshot string none 屏幕截图返回格式(noneas_fileas_base64as_imagecontentas_imageurl
as_file_target_folder string 使用 'as_file' 返回格式时保存屏幕截图的目标文件夹路径
end_transaction
save_last_screenshot filename string 将保存屏幕截图的路径

开发

运行测试

  1. 使用 mcp inspector 测试服务器(构建 + 调试):
./run.bat full
  1. 或者使用测试套件: 测试套件包括与 SAP GUI 交互的实时测试。 在运行测试之前,请确保已安装并配置 SAP GUI。

运行测试:

run.bat test server

测试套件包括:

  • SapGuiServer 测试 (test_server.py)
    • 工具注册
    • 请求处理
    • 响应格式化
    • 错误处理

项目结构

mcp-sap-gui/
├── src/
│   └── sap_gui_server/
│       ├── __init__.py
│       ├── sap_controller.py  # SAP GUI 交互逻辑
│       └── server.py         # MCP 服务器实现
├── tests/
│   ├── __init__.py
│   ├── test_sap_controller.py
│   └── test_server.py
├── build.bat          # 构建和测试脚本
├── integrate.bat      # Cline/Roo 的集成脚本
├── integrate.py       # 用于安全 MCP 设置更新的 Python 脚本
├── requirements.txt   # 生产依赖项
└── requirements-dev.txt  # 开发依赖项

许可证

[MIT 许可证]

推荐服务器

Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
Beamlit MCP Server

Beamlit MCP Server

一个 MCP 服务器实现,它支持 Beamlit CLI 和 AI 模型之间的无缝集成,并使用模型上下文协议标准。

官方
TypeScript
ThingsPanel MCP

ThingsPanel MCP

一个集成服务器,将人工智能模型与 ThingsPanel 物联网平台连接起来,使人工智能助手能够通过自然语言与物联网设备交互,以进行设备控制、数据检索和管理操作。

官方
Python
systemd-coredump MCP Server

systemd-coredump MCP Server

启用支持 MCP 的应用程序,通过与 systemd-coredump 功能集成,来访问、管理和分析系统核心转储。

本地
JavaScript
Terminal Controller for MCP

Terminal Controller for MCP

一个 MCP 服务器,它通过一个标准化的接口,使 LLM 能够安全地执行终端命令、进行目录导航和进行文件系统操作。

本地
Python
mac-apps-launcher

mac-apps-launcher

一个 MCP 服务器,用于在 MacOS 上列出和启动应用程序。 (Yī gè MCP fúwùqì, yòng yú zài MacOS shàng lièchū hé qǐdòng yìngyòng chéngxù.)

本地
JavaScript
applescript-mcp

applescript-mcp

使LLM应用程序能够通过AppleScript与macOS交互。

本地
TypeScript
Google Tasks MCP Server

Google Tasks MCP Server

与 Google Tasks 集成,允许列出、读取、搜索、创建、更新和删除任务。

本地
TypeScript
MCP 3D Printer Server

MCP 3D Printer Server

通过 MCP 服务器实现与 3D 打印机管理系统的交互,支持 STL 文件操作、切片以及对 OctoPrint、Klipper、Duet 等打印机的控制。

本地
TypeScript