🚀 SAP的MCP
此存储库实现了 MCP(模型上下文协议) 演示 SAP GenAI解决方案.\ 目的是展示 即插即用工具集成 (剧作家、托斯卡、UiPath、Jira、Xray、SAP模拟)在一个统一的MCP服务器下。
它旨在支持RfP和客户端演示,利益相关者希望了解如何动态编排不同的自动化/测试工具:
- 🔄 实时切换配置文件 (仅限剧作家、仅限UiPath、仅限Tosca或全部)
- 🔗 工具之间的桥梁 (例如,采用X射线测试用例并生成Tosca资产)
- 📊 模拟SAP元数据和销售订单 适用于现实的工作流程
- ⚡ 提供可重复的单脚本演示环境 与当地法学硕士(LM Studio)合作
- 🌐 使用剧作家流程模拟SAP Fiori UI 模拟HTML+JSON数据
- 🤖 在SAP模拟上演示UiPath/Tsca自动化 无需实时SAP系统
______________________________________________________________________
📂 项目结构
mcp-sap/
│
├── server/
| ├── mcp_sap.py # MCP server entry point (loads adapters + bridges)
| ├── requirements.txt # Python dependencies
| └── adapters/ # Separate modules for each adapter
│ ├── sap_adapter.py # SAP mocks (sales orders + metadata)
│ ├── playwright_adapter.py # Real Playwright actions (check, screenshot, run steps)
│ ├── jira_adapter.py # Jira mocks (issues/search)
│ ├── xray_adapter.py # Xray mocks (tests, test sets, test executions)
│ ├── uipath_adapter.py # UiPath mocks (process list, start job, job status)
| ├── bridges_adapter.py # Bridges between tools, e.g. convert Xray test cases into Tosca packs
| ├── core.py # Script that initializes the MCP server, loads adapters, and manages profile switching between tools
│ └── tosca_adapter.py # Tosca mock asset generator
│
│
├── data/
│ └── mocks/ # Example JSON mocks for SAP/Jira/Xray/UiPath
| ├── metadata/sap_metadata.json # Example SAP service metadata
| └── sap/sales_orders.json # Multiple SAP sales orders (for mock UI flows)
|
|
├── mock-ui/ # Example JSON mocks for SAP/Jira/Xray/UiPath
| ├── flp.html # Fiori Launchpad mock
| └── sales_orders.html # Sales Orders app mock (reads from sales_orders.json)
│
├── artifacts/ # Output folder for generated Tosca packs & demo assets
│
└── README.md # This guide______________________________________________________________________
⚙️ 如何使用
0.环境设置
创建并激活venv(可选,但推荐)
python3 -m venv .venv
source .venv/bin/activate安装依赖项
pip install -r requirements.txt安装Playwright浏览器
playwright install chromium从repo根目录启动静态服务器以模拟SAP UI
python3 -m http.server 8000首选http://localhost:8000/mock-ui/flp.html查看模拟fiori发射台
首选http://localhost:8000/data/mocks/sap/sales_orders.json查看数据
->要停止静态服务器,请按CTRL+C
1.建立LM工作室
下载并安装LM Studio:https://lmstudio.ai
转到程序→ 安装→ 编辑mcp.json,然后将其粘贴到您的路径中:
{
"mcpServers": {
"sap-mcp-local": {
"command": "absolute/path/to/python/folder (e.g. .../server/.venv/bin/python)",
"args": [
"mcp_sap.py"
],
"cwd": "absolute/path/to/server"
}
}
}2.加载哪个型号
我们建议使用轻量级的指令模型进行演示:
qwen2.5-7b-instruct-1m这个模型平衡了速度和质量。在LM Studio中下载它,然后在开始演示之前加载它。
3.可用工具概述
- 列表_能力 -列出所有可用适配器及其当前启用状态。
- 当前文件 -检索当前活动的配置文件设置。
- set_profile -设置当前配置文件以启用一组特定的适配器。
- run_with_profile -原子化地设置一个配置文件,并在一个回合中调用一个工具
profile,tool,以及args_json作为参数。 - pw_检查 -检查选择器是否在页面上可见;需要检查URL和选择器。
- pw_屏幕截图 -截取页面或特定元素的屏幕截图;接受URL、整页与单个元素屏幕截图的可选选择器、输出文件名和超时作为参数。
- pw_run_steps -在提供的起始URL上运行一系列Playwright步骤,并执行指定的操作,如导航、单击按钮、填写表单等。;需要
steps列表和可选start_url. - sapui_wait_ready -等待SAP Fiori的“忙碌”指标消失后再继续。
- sapui_open_tile -打开Fiori Launchpad(FLP)URL,点击特定磁贴的可见文本以启动应用程序;需要FLP URL和带有可选超时的磁贴文本。
- sapui_click_button -按ARIA名称或“创建”、“保存”等可见文本单击Fiori按钮。;获取按钮的可见文本或ARIA名称以及可选的超时。
- sapui_fill_by_label -按标签填充输入字段;需要填写标签和值,以及可选的超时。
- 烤面包机 -断言带有特定文本的Fiori MessageToast显示为“已保存”、“已发布”;检查文本的外观。
- sapui_assert_visible -检查页面上是否可见特定的文本或CSS/XPath选择器;需要文本或选择器以及可选的超时。
- sapui_run_flow -执行一系列与SAP Fiori应用程序交互的步骤,包括等待准备就绪、打开互动程序、单击按钮、断言消息等。;以JSON列表的形式执行步骤,并可选择启动URL和总超时。
- jira-status -检查JIRA适配器是否已启用。
- jira_mock -模拟JIRA API调用;支持按关键字获取问题或通过JQL使用可选参数类型进行搜索(
issue/search)id(用于问题)或jcl字符串用于搜索。 - xray_status -检查XRay适配器是否已启用。
- xray_mock -模拟XRay API调用;支持按键获取测试、按键获取计划或使用可选参数类型的执行(
test/plan/execution)以及key(用于测试/计划)或id(用于执行)。 - uipath_status -检查UiPath适配器是否已启用。
- Uipath锁 -模拟UiPath API调用;支持检查流程、启动作业或获取可选类型的作业状态(
processes/start_job/job_status)和键(用于启动作业等特定操作)。 - tosca_status -检查Tosca适配器是否已启用。
- tosca_pack_from_steps -从SAP风格的步骤生成Tosca包,其中包含命名选项、压缩选项,以及生成测试资产的步骤列表或需求文本。
- jira_to_uipath_job_spec -将JIRA问题转化为简单的UiPath作业规范;需要作业启动规范的问题密钥和可选进程名称。
- xray_totosca_pack -将XRay测试(模拟或真实)转换为CSV/JSON格式的Tosca包或所需的ZIP文件
key参数、可选的pack_name和zip-pack布尔值。 - jira_to_tosca-pack -从JIRA问题摘要/描述创建快速Tosca包,用于生成尚未进行XRay测试的测试资产;需要问题密钥、生成包的可选名称以及zip选项(如果为true)。
您可以使用以下命令调用这些函数 run_with_profile 功能,以确保您在特定的配置文件上下文中操作。请参阅下面的更多具体示例。
4.演示流程(复制并粘贴到LM Studio聊天室)
打开LM Studio聊天,加载模型,在集成下选择“mcp/sap mcp local”并粘贴:
a.开关配置文件
Call tool list_capabilities
Call tool set_profile name="playwright"
Call tool current_profileb.SAP模拟演示
Call tool set_profile name="sap"
Call tool sap_mock endpoint="sales_order" id="12345"
Call tool sap_metadata service="default"c.剧作家演示(真实浏览器检查)
Call tool set_profile name="playwright"
Call tool pw_check url="https://example.com" selector="h1"d.剧作家SAP UI模拟演示
Call tool set_profile name="playwright"
Call tool sapui_run_flow start_url="http://localhost:8000/mock-ui/flp.html" steps="[
{\"action\":\"open_tile\",\"tile_text\":\"Sales Orders\"},
{\"action\":\"fill_by_label\",\"label\":\"Customer\",\"value\":\"1000001\"},
{\"action\":\"fill_by_label\",\"label\":\"Amount\",\"value\":\"1250.50\"},
{\"action\":\"click_button\",\"name\":\"Create\"},
{\"action\":\"assert_toast\",\"text\":\"Saved\"}
]"e.UiPath状态和模拟流程
Call tool set_profile name="uipath"
Call tool uipath_status
Call tool uipath_mock kind="processes"f.SAP mock UI上的UiPath(mock)运行流
Call tool run_with_profile profile="all" tool="uipath_run_flow_on_mock_ui" args_json="{
\"start_url\":\"http://localhost:8000/mock-ui/flp.html\",
\"steps\": [
{\"action\":\"open_tile\",\"tile_text\":\"Sales Orders\"},
{\"action\":\"assert_visible\",\"text_or_selector\":\"Sales Orders\"},
{\"action\":\"fill_by_label\",\"label\":\"Customer\",\"value\":\"1000001\"},
{\"action\":\"fill_by_label\",\"label\":\"Amount\",\"value\":\"1250.50\"},
{\"action\":\"click_button\",\"name\":\"Create\"},
{\"action\":\"assert_toast\",\"text\":\"Saved\"}
]
}"g.从以下步骤生成UiPath Studio序列(.xaml)
Call tool run_with_profile profile="uipath" tool="uipath_generate_xaml" args_json="{
\"steps\": [
{\"action\":\"open_tile\",\"tile_text\":\"Sales Orders\"},
{\"action\":\"fill_by_label\",\"label\":\"Customer\",\"value\":\"1000001\"},
{\"action\":\"click_button\",\"name\":\"Create\"},
{\"action\":\"assert_toast\",\"text\":\"Saved\"}
],
\"file_name\":\"UiPath_Mock_SAP_Demo.xaml\"
}"h.Tosca演示(模拟资产)
Call tool set_profile name="tosca"
Call tool tosca_run_flow_on_mock_ui flow="validate_sales_order"i. 在SAP模拟UI上运行Tosca(模拟)流程
Call tool run_with_profile profile="all" tool="tosca_run_flow_on_mock_ui" args_json="{
\"start_url\":\"http://localhost:8000/mock-ui/flp.html\",
\"steps\": [
{\"action\":\"open_tile\",\"tile_text\":\"Sales Orders\"},
{\"action\":\"assert_visible\",\"text_or_selector\":\"Sales Orders\"},
{\"action\":\"fill_by_label\",\"label\":\"Customer\",\"value\":\"1000001\"},
{\"action\":\"fill_by_label\",\"label\":\"Amount\",\"value\":\"1250.50\"},
{\"action\":\"click_button\",\"name\":\"Create\"},
{\"action\":\"assert_toast\",\"text\":\"Saved\"}
]
}"j.按步骤生成Tosca模拟包
Call tool run_with_profile profile="tosca" tool="tosca_pack_from_steps" args_json="{
\"steps\": [
{\"action\":\"open_tile\",\"tile_text\":\"Sales Orders\"},
{\"action\":\"fill_by_label\",\"label\":\"Customer\",\"value\":\"1000001\"},
{\"action\":\"click_button\",\"name\":\"Create\"},
{\"action\":\"assert_toast\",\"text\":\"Saved\"}
],
\"pack_name\":\"tosca_sap_mock_demo\",
\"zip_pack\": true
}"k.托斯卡大桥的X射线
Call tool set_profile name="all"
Call tool xray_to_tosca_pack key="SAP-TC-101" pack_name="xray-bridge-demo" zip_pack=true结果:将在以下位置创建ZIP artifacts// / 包含:
testcases.csv
modules.csv
testcases.json
README.mdl.Xray->SAP编剧流程
Call tool run_with_profile profile="all" tool="run_xray_sapui_flow" args_json="{
\"key\":\"SAP-TC-101\",
\"flp_url\":\"http://localhost:8000/mock-ui/flp.html\",
\"default_tile\":\"Sales Orders\"
}"m.Jira和Xray状态+示例搜索
Call tool set_profile name="jira"
Call tool jira_status
Call tool jira_mock kind="issue" id="SAP-123"
Call tool jira_mock kind="search" jql="project = SAP AND text ~ \"order\""______________________________________________________________________
📝 备注
模拟与真实API: Jira/Xray/UiPath在模拟模式下运行,除非通过环境变量(.env)提供真实凭据。
人工产品: 所有生成的Tosca包都放置在 artifacts//....
SAP模拟用户界面: mock-ui/flp.html + sales_orders.html 让剧作家/UiPath/Tsca在没有实时SAP系统的情况下演示Fiori风格的流程。
可扩展性: 只需在下面放置一个脚本,就可以添加新的适配器或网桥 /adapters
