这是一个用于 SAP GUI 自动化的 Model Context Protocol (MCP) 服务器。该服务器提供了工具来自动化与 SAP GUI 的交互,从而实现对 SAP 事务的程序化控制。
setup.bat
这将引导您完成构建过程,并在选择的情况下将其直接集成到 Cline 或 Roo 中。
build.bat
.env.example 复制为 .envrun.bat debug
integrate.bat cline # 配置为 Cline
integrate.bat roo # 配置为 Roo
脚本将:
手动配置(如果需要):
"mcp-sap-gui": {
"command": "python",
"args": [
"-m",
"sap_gui_server.server"
],
"cwd": "PATH_TO_YOUR_FOLDER/mcp-sap-gui",
"disabled": false,
"autoApprove": []
}
**重要安全通知:**
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": "状态:成功"
}
as_file: 将截图保存到指定的目标文件夹并返回路径{
"type": "text",
"text": "截图保存为 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 | 截图将被保存的路径 |
./run.bat full
运行测试:
run.bat test server
测试套件包括:
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 # Python 脚本用于安全的 MCP 设置更新
├── requirements.txt # 生产依赖项
└── requirements-dev.txt # 开发依赖项
[MIT 许可证]