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 物联网平台连接起来,使人工智能助手能够通过自然语言与物联网设备交互,以进行设备控制、数据检索和管理操作。
MacOS Clipboard MCP Server
通过 OSAScript 为 AI 助手提供访问 macOS 剪贴板内容的能力,支持文本、图像和二进制数据。
Ollama MCP Server
一个桥梁,能够将 Ollama 的本地 LLM 功能无缝集成到 MCP 驱动的应用程序中,允许用户在本地管理和运行 AI 模型,并提供完整的 API 覆盖。
Android MCP Server
一个服务器,可以通过 ADB 以编程方式控制 Android 设备,提供诸如屏幕截图捕获、UI 布局分析和软件包管理等功能,这些功能可以被像 Claude Desktop 这样的 MCP 客户端访问。
mcp-wsl-exec
一个安全的 MCP 服务器,用于 Windows Linux 子系统环境,通过广泛的验证和保护机制,促进安全的命令执行,并防御诸如 Shell 注入和危险命令等漏洞。
simulator-mcp-server
一个用于控制 iOS 模拟器的 MCP 服务器。
mcp-server-commands
一个用于运行指令的 MCP 服务器。