MCP SAP GUI Server
使用模型上下文协议自动执行与 SAP GUI 的交互,从而可以通过点击、键入、滚动和事务管理等工具精确控制 SAP 事务。
README
MCP SAP GUI 服务器
用于 SAP GUI 自动化的模型上下文协议 (MCP) 服务器。此服务器提供工具来自动化与 SAP GUI 的交互,从而实现对 SAP 事务的程序化控制。
要求
- Python 3.8 或更高版本
- 已安装并配置的 SAP GUI
- 有效的 SAP 凭据(系统、客户端、用户、密码)
- Node.js (用于 npx)
安装
- 克隆 github 文件夹并使用安装脚本运行自动安装:
setup.bat
这将引导您完成构建过程,如果选择,将直接将其集成到 Cline 或 Roo 中。
- 或者使用构建脚本手动安装..:
build.bat
- 配置 SAP 凭据:
- 复制
.env.example
到.env
- 使用您的 SAP 凭据更新值
- 使用 mcp inspector 测试服务器:
run.bat debug
- 使用集成脚本自动配置 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": []
}
- 使用此提示向您的 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
参数控制的不同屏幕截图返回格式:
none
(默认): 仅返回成功/错误消息
{
"type": "text",
"text": "Status: success"
}
as_file
: 将屏幕截图保存到指定的目标文件夹并返回路径
{
"type": "text",
"text": "Screenshot saved as C:/path/to/file/screenshot.png"
}
注意:使用 as_file
时,必须使用 as_file_target_folder
参数指定目标文件夹。 如果该文件夹不存在,则将创建该文件夹。
as_base64
: 返回原始 base64 字符串
{
"type": "text",
"text": "base64_encoded_string_here"
}
as_imagecontent
: 返回 MCP ImageContent 对象
{
"type": "image",
"data": "base64_encoded_string_here",
"mimeType": "image/png"
}
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 |
屏幕截图返回格式(none 、as_file 、as_base64 、as_imagecontent 、as_imageurl ) |
|
as_file_target_folder |
string |
使用 'as_file' 返回格式时保存屏幕截图的目标文件夹路径 | ||
sap_click |
x |
integer |
应发生点击的水平像素坐标 (0-1920) | |
y |
integer |
应发生点击的垂直像素坐标 (0-1080) | ||
return_screenshot |
string |
none |
屏幕截图返回格式(none 、as_file 、as_base64 、as_imagecontent 、as_imageurl ) |
|
as_file_target_folder |
string |
使用 'as_file' 返回格式时保存屏幕截图的目标文件夹路径 | ||
sap_move_mouse |
x |
integer |
将光标移动到的水平像素坐标 (0-1920) | |
y |
integer |
将光标移动到的垂直像素坐标 (0-1080) | ||
return_screenshot |
string |
none |
屏幕截图返回格式(none 、as_file 、as_base64 、as_imagecontent 、as_imageurl ) |
|
as_file_target_folder |
string |
使用 'as_file' 返回格式时保存屏幕截图的目标文件夹路径 | ||
sap_type |
text |
string |
在 SAP GUI 窗口中的当前光标位置输入的文本 | |
return_screenshot |
string |
none |
屏幕截图返回格式(none 、as_file 、as_base64 、as_imagecontent 、as_imageurl ) |
|
as_file_target_folder |
string |
使用 'as_file' 返回格式时保存屏幕截图的目标文件夹路径 | ||
sap_scroll |
direction |
string |
滚动屏幕的方向('up' 向上移动内容,'down' 向下移动内容) | |
return_screenshot |
string |
none |
屏幕截图返回格式(none 、as_file 、as_base64 、as_imagecontent 、as_imageurl ) |
|
as_file_target_folder |
string |
使用 'as_file' 返回格式时保存屏幕截图的目标文件夹路径 | ||
end_transaction |
||||
save_last_screenshot |
filename |
string |
将保存屏幕截图的路径 |
开发
运行测试
- 使用 mcp inspector 测试服务器(构建 + 调试):
./run.bat full
- 或者使用测试套件: 测试套件包括与 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 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。
@kazuph/mcp-taskmanager
用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。
Beamlit MCP Server
一个 MCP 服务器实现,它支持 Beamlit CLI 和 AI 模型之间的无缝集成,并使用模型上下文协议标准。
ThingsPanel MCP
一个集成服务器,将人工智能模型与 ThingsPanel 物联网平台连接起来,使人工智能助手能够通过自然语言与物联网设备交互,以进行设备控制、数据检索和管理操作。

systemd-coredump MCP Server
启用支持 MCP 的应用程序,通过与 systemd-coredump 功能集成,来访问、管理和分析系统核心转储。
Terminal Controller for MCP
一个 MCP 服务器,它通过一个标准化的接口,使 LLM 能够安全地执行终端命令、进行目录导航和进行文件系统操作。

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ù.)
applescript-mcp
使LLM应用程序能够通过AppleScript与macOS交互。
Google Tasks MCP Server
与 Google Tasks 集成,允许列出、读取、搜索、创建、更新和删除任务。
MCP 3D Printer Server
通过 MCP 服务器实现与 3D 打印机管理系统的交互,支持 STL 文件操作、切片以及对 OctoPrint、Klipper、Duet 等打印机的控制。