Skip to main content
Glama
hongwenwang36-eng

ansys-workbench-mcp

README.md
# Ansys Workbench MCP

一个用于连接 **Codex / MCP 客户端** 和 **Ansys Workbench / ICEM CFD** 的本地桥接项目。它通过文件队列 IPC 让外部 AI 助手向 Workbench 或 ICEM CFD 发送命令,并在 Ansys 进程内执行脚本和返回结果。

本项目不是 Ansys 官方项目,也不依赖鼠标点击 GUI。它封装的是 Ansys 已支持的自动化入口:Workbench journal、Workbench scripting、ICEM Tcl/Replay、MAPDL batch、Fluent journal 和 CFX solver batch。

## 最新更新

- **ICEM CFD 常驻桥**:启动 GUI 或无界面 ICEM 会话,并直接执行 Tcl/Replay 命令
- **ICEM CFD 批处理**:通过 `run_icem_replay` 运行一次性网格脚本,无需脚本自行添加 `exit`
- **ICEM 命令发现**:查询当前会话信息,并按模式列出 `ic_*`、`ic_hex_*` 等命令
- **通用 Workbench 分析系统创建**:通过 `create_workbench_analysis_system_live` 创建指定模板的分析系统
- **分析模板探测**:通过 `probe_workbench_analysis_templates_live` 检查当前 Ansys 安装中可用的 Workbench 模板
- **热分析封装**:支持稳态热和瞬态热系统创建
- **结构和动力学封装**:支持静力、瞬态结构、模态、谐响应、响应谱、随机振动系统创建
- **CFX 封装**:支持 Workbench CFX 系统创建,也支持直接运行 CFX `.def`
- **Fluent 封装**:支持直接运行 Fluent journal;如果本机 Workbench 有 Fluent 模板,也可以用模板名覆盖方式创建系统
- **安装检查增强**:`check_ansys_installation` 会同时检查 Workbench、Mechanical、MAPDL、Fluent、CFX 路径
- **README 重构**:按安装、连接、使用、工具、协议和排错的顺序组织

## 架构

```text
+--------------+     MCP stdio      +---------------+      file IPC       +--------------------+
| MCP Client   |  ----------------> | mcp_server.py |  ----------------> | Ansys Workbench    |
| Codex        |  <---------------- | FastMCP       |  <---------------- | bridge journal     |
+--------------+                    +---------------+                     +--------------------+
                                           |
                                           v
                                  commands/*.json  ->  Workbench reads
                                  results/*.json   <-  Workbench writes
                                  status.json      <-  bridge heartbeat
```

Workbench 侧由 `ansys_workbench_bridge.wbjn` 轮询 `commands/` 目录。MCP server 写入命令文件,Workbench 执行后把结果写入 `results/`,Codex 再读取结果并返回给用户。

ICEM CFD 侧由 `icem_cfd_bridge.tcl` 轮询 `icem/commands/`。每条命令引用一个独立 Tcl/Replay 脚本,执行结果、错误堆栈和心跳分别写入 `icem/results/`、`icem/status.json` 和 `icem/icem_bridge.log`。

## 功能

- 检查本机 Ansys Workbench、Mechanical、MAPDL、Fluent、CFX、ICEM CFD 路径
- 启动、停止和检查 Workbench bridge
- 启动、停止和检查 ICEM CFD 常驻桥
- 在当前 ICEM CFD 会话中直接执行 Tcl/Replay 命令
- 查询 ICEM 会话和可用命令,或运行一次性 Replay 批处理
- 在正在运行的 Workbench 会话中执行脚本
- 读取当前 Workbench 项目的系统和组件信息
- 打开、保存、更新 Workbench 项目
- 探测 Workbench 分析模板
- 创建 Workbench 分析系统
- 创建稳态热、瞬态热、静力、瞬态结构、模态、谐响应、响应谱、随机振动、CFX 系统
- 尝试创建 Fluent Workbench 系统
- 直接运行任意 Workbench journal
- 直接运行 MAPDL 输入文件
- 直接运行 Fluent journal
- 直接运行 CFX solver input
- 创建并求解一个简单稳态热示例

## 安装

### 1. 克隆项目

推荐安装到 `D:\ansys-workbench-mcp`:

```powershell
cd D:\
git clone https://github.com/hongwenwang36-eng/ANSYS-Workbench-mcp.git ansys-workbench-mcp
cd D:\ansys-workbench-mcp
```

也可以在 GitHub 页面下载 ZIP,然后解压到:

```text
D:\ansys-workbench-mcp
```

### 2. 安装 Python 依赖

推荐使用虚拟环境:

```powershell
cd D:\ansys-workbench-mcp
py -3.13 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
```

如果没有 Python 3.13,先查看本机 Python:

```powershell
py -0p
```

然后把 `py -3.13` 换成实际版本,例如 `py -3.11`。

### 3. 确认 Ansys 路径

默认按 Ansys 2025 R1 配置:

```text
Workbench:  D:\Program Files\ANSYS Inc\v251\Framework\bin\Win64\RunWB2.exe
Mechanical: D:\Program Files\ANSYS Inc\v251\aisol\bin\winx64\AnsysWBU.exe
MAPDL:      D:\Program Files\ANSYS Inc\v251\ansys\bin\winx64\ANSYS251.exe
Fluent:     D:\Program Files\ANSYS Inc\v251\fluent\ntbin\win64\fluent.exe
CFX solve:  D:\Program Files\ANSYS Inc\v251\CFX\bin\cfx5solve.exe
CFX pre:    D:\Program Files\ANSYS Inc\v251\CFX\bin\cfx5pre.exe
ICEM CFD:   D:\Program Files\ANSYS Inc\v251\icemcfd\win64_amd\bin\icemcfd.bat
```

如果你的安装路径不同,后续在 Codex MCP 配置里改对应环境变量。

### 4. 配置 Codex MCP

打开 Codex 配置文件:

```text
%USERPROFILE%\.codex\config.toml
```

加入:

```toml
[mcp_servers.ansys-workbench]
command = 'D:\ansys-workbench-mcp\.venv\Scripts\python.exe'
args = ['D:\ansys-workbench-mcp\mcp_server.py']
cwd = 'D:\ansys-workbench-mcp'
startup_timeout_sec = 30
tool_timeout_sec = 600
enabled = true

[mcp_servers.ansys-workbench.env]
ANSYS_WORKBENCH_MCP_HOME = 'D:\ansys-workbench-mcp'
ANSYS_RUNWB2 = 'D:\Program Files\ANSYS Inc\v251\Framework\bin\Win64\RunWB2.exe'
ANSYS_MECHANICAL = 'D:\Program Files\ANSYS Inc\v251\aisol\bin\winx64\AnsysWBU.exe'
ANSYS_MAPDL = 'D:\Program Files\ANSYS Inc\v251\ansys\bin\winx64\ANSYS251.exe'
ANSYS_FLUENT = 'D:\Program Files\ANSYS Inc\v251\fluent\ntbin\win64\fluent.exe'
ANSYS_CFX_SOLVE = 'D:\Program Files\ANSYS Inc\v251\CFX\bin\cfx5solve.exe'
ANSYS_CFX_PRE = 'D:\Program Files\ANSYS Inc\v251\CFX\bin\cfx5pre.exe'
ANSYS_ICEM_CFD = 'D:\Program Files\ANSYS Inc\v251\icemcfd\win64_amd\bin\icemcfd.bat'
```

修改后重启 Codex,让 MCP server 重新加载。

## 使用

### 检查安装

在 Codex 中调用:

```text
check_ansys_installation
```

该工具会检查 Workbench、Mechanical、MAPDL、Fluent、CFX、ICEM CFD 和两个 bridge 脚本是否存在。

### 启动 Workbench bridge

在 Codex 中调用:

```text
start_workbench_bridge
```

它会用 `RunWB2.exe` 加载:

```text
D:\ansys-workbench-mcp\ansys_workbench_bridge.wbjn
```

然后 Workbench bridge 开始轮询 `commands/`。

### 检查连接状态

```text
check_workbench_connection
```

如果连接正常,会返回 Workbench bridge 版本、状态、PID 和命令计数。

### 手动加载 bridge

也可以先打开 Workbench,然后手动运行:

```text
File -> Run Script... -> D:\ansys-workbench-mcp\ansys_workbench_bridge.wbjn
```

该 journal 会进入 `mcp_loop()` 并监听 MCP 命令。

### 停止 bridge

方式一,在 Codex 中调用:

```text
stop_workbench_bridge
```

方式二,在 PowerShell 中运行:

```powershell
cd D:\ansys-workbench-mcp
.\.venv\Scripts\python.exe .\stop_mcp.py
```

### 使用 ICEM CFD 常驻桥

启动带界面的 ICEM CFD:

```text
start_icem_bridge
```

启动无界面的常驻会话:

```text
start_icem_bridge(batch=true)
```

连接后可直接执行 ICEM Tcl/Replay 命令:

```text
execute_icem_script(script="ic_load_tetin {D:/cases/model.tin}")
```

查询会话或 Blocking 命令:

```text
get_icem_session_info
list_icem_commands(pattern="ic_hex_*", limit=300)
```

运行现有 Replay 文件作为一次性批处理:

```text
run_icem_replay(replay_file="D:/cases/mesh.rpl", workdir="D:/cases")
```

停止常驻会话并关闭由桥启动的 ICEM 进程:

```text
stop_icem_bridge
```

`execute_icem_script` 在 ICEM 自身的 Tcl 解释器中执行,能够调用当前安装中实际存在的 `ic_*` 命令。对于建几何、Blocking、网格质量和导出流程,推荐先在 ICEM 的 Replay Control 中录制一小段命令,再通过该工具参数化和复用。

### 工作模式

| 模式 | 是否需要 Workbench bridge | 适用场景 |
| --- | --- | --- |
| 常驻 bridge | 需要 | 在一个 Workbench 会话中持续创建系统、执行脚本、查询项目 |
| 直接 Workbench batch | 不需要 | 一次性运行 `.wbjn` 或创建项目 |
| MAPDL batch | 不需要 | 直接运行 APDL `.dat` 输入文件 |
| Fluent journal | 不需要 | 直接运行 Fluent TUI/journal 自动化 |
| CFX solver | 不需要 | 直接运行 CFX `.def` solver input |
| ICEM 常驻桥 | 不需要 Workbench;需要 ICEM bridge | 在同一 ICEM 会话中持续导入、Blocking、划分网格和查询状态 |
| ICEM Replay batch | 不需要 | 一次性运行 ICEM Tcl/Replay 网格流程 |

## MCP 工具

这些工具由 `mcp_server.py` 暴露给 Codex 或其他 MCP 客户端。

| 工具 | 说明 |
| --- | --- |
| `check_ansys_installation` | 检查 Ansys 可执行文件和 bridge journal 路径 |
| `check_icem_installation` | 检查 ICEM CFD 启动器和 Tcl bridge |
| `start_icem_bridge` | 启动带 GUI 或无界面的 ICEM CFD 常驻桥 |
| `stop_icem_bridge` | 停止常驻桥并关闭对应 ICEM 进程 |
| `check_icem_connection` | 检查 ICEM CFD 会话是否在线并响应 |
| `execute_icem_script` | 在当前 ICEM 会话中执行 Tcl/Replay 命令 |
| `get_icem_session_info` | 查询 ICEM PID、目录、Tcl 版本和命令数量 |
| `list_icem_commands` | 按 Tcl glob 模式列出当前 ICEM 命令 |
| `run_icem_replay` | 一次性批处理运行 ICEM Tcl/Replay 文件 |
| `start_workbench_bridge` | 启动 Workbench bridge |
| `stop_workbench_bridge` | 停止 Workbench bridge |
| `check_workbench_connection` | 检查 Workbench bridge 是否在线并响应 |
| `execute_workbench_script` | 在 Workbench bridge 会话内执行脚本 |
| `get_project_info` | 获取当前 Workbench 项目系统和组件信息 |
| `open_project` | 在 Workbench bridge 会话内打开 `.wbpj` |
| `save_project` | 保存当前 Workbench 项目 |
| `update_project` | 执行 Workbench `Update()` |
| `probe_workbench_analysis_templates_live` | 探测当前 Workbench 可用分析模板 |
| `create_workbench_analysis_system_live` | 在 bridge 会话中创建通用分析系统 |
| `create_steady_state_thermal_system_live` | 创建稳态热系统 |
| `create_transient_thermal_system_live` | 创建瞬态热系统 |
| `create_static_structural_system_live` | 创建静力结构系统 |
| `create_transient_structural_system_live` | 创建瞬态结构系统 |
| `create_modal_analysis_system_live` | 创建模态分析系统 |
| `create_harmonic_response_system_live` | 创建谐响应系统 |
| `create_response_spectrum_system_live` | 创建响应谱系统 |
| `create_random_vibration_system_live` | 创建随机振动系统 |
| `create_cfx_flow_system_live` | 创建 CFX 流体系统 |
| `create_fluent_flow_system_live` | 尝试创建 Fluent Workbench 系统 |
| `create_thermal_bar_demo_live` | 通过 bridge 创建并求解稳态热示例 |
| `run_workbench_journal` | 直接运行 Workbench journal |
| `create_workbench_analysis_system` | 直接批处理创建 Workbench 分析系统 |
| `create_steady_state_thermal_system` | 直接批处理创建稳态热系统 |
| `run_mapdl_input` | 直接运行 MAPDL 输入文件 |
| `run_fluent_journal` | 直接运行 Fluent journal |
| `run_cfx_solver` | 直接运行 CFX solver input |
| `create_and_run_thermal_bar_demo` | 直接批处理创建并求解稳态热示例 |

## MCP 资源

| URI | 说明 |
| --- | --- |
| `ansys-workbench://status` | 当前 bridge 状态、PID、命令计数和时间戳 |
| `ansys-workbench://installation` | 当前配置的 Ansys 可执行文件路径 |
| `ansys-workbench://icem/status` | 当前 ICEM CFD bridge 状态、PID、命令计数和心跳 |

## 分析系统类型

`create_workbench_analysis_system_live` 和 `create_workbench_analysis_system` 支持:

| `analysis_type` | Workbench 模板 |
| --- | --- |
| `steady_state_thermal` | `Steady-State Thermal` |
| `transient_thermal` | `Transient Thermal` |
| `static_structural` | `Static Structural` |
| `transient_structural` | `Transient Structural` |
| `modal` | `Modal` |
| `harmonic_response` | `Harmonic Response` |
| `response_spectrum` | `Response Spectrum` |
| `random_vibration` | `Random Vibration` |
| `cfx` | `Fluid Flow (CFX)` 或 `CFX` |
| `fluent` | `Fluid Flow (Fluent)` 或 `Fluent`,取决于本机 Workbench 模板是否可用 |

如果本机模板名不同,可以用 `template_name` 和 `solver` 参数覆盖。

## Fluent 和 CFX 说明

在当前测试机器上:

- CFX 的 Workbench 模板可用:`Fluid Flow (CFX)`
- Fluent 的 `fluent.exe` 可用
- 常见 Workbench Fluent 模板名 `Fluid Flow (Fluent)` 和 `Fluent` 没有被当前 Workbench 模板接口找到

因此:

- CFX 可以通过 Workbench 系统创建,也可以通过 `run_cfx_solver` 直接运行 `.def`
- Fluent 推荐先通过 `run_fluent_journal` 运行 journal/TUI 自动化
- 如果你的 Workbench 安装中 Fluent 模板名不同,可以用 `create_workbench_analysis_system_live` 的 `template_name` 参数覆盖

## 文件 IPC 协议

MCP server 会向 `commands/` 写入 JSON 命令文件:

```python
import json
import time
from pathlib import Path

command = {
    "id": "my_command",
    "type": "execute_script",
    "script": "print('Hello from Workbench')",
    "timestamp": time.time(),
}

cmd_path = Path(r"D:\ansys-workbench-mcp\commands\cmd_my_command.json")
cmd_path.write_text(json.dumps(command, indent=2), encoding="utf-8")
```

Workbench bridge 执行后,会把结果写入:

```text
D:\ansys-workbench-mcp\results\my_command.json
```

### 命令类型

| type | 参数 | 说明 |
| --- | --- | --- |
| `ping` | 无 | 测试 bridge 是否在线 |
| `execute_script` | `script` | 在 Workbench 会话内执行脚本 |
| `get_project_info` | 无 | 获取项目系统和组件信息 |
| `open_project` | `project_file` | 打开 Workbench 项目 |
| `save_project` | `project_file`, `overwrite` | 保存项目 |
| `update_project` | 无 | 执行 `Update()` |
| `probe_analysis_templates` | `analysis_templates` | 探测模板是否存在 |
| `create_analysis_system` | `project_dir`, `project_name`, `template_candidates` 等 | 创建 Workbench 分析系统 |
| `create_steady_state_thermal_system` | `project_dir`, `project_name`, `geometry_file` | 创建稳态热系统 |
| `create_thermal_bar_demo` | `project_dir` | 创建并求解稳态热示例 |
| `stop` | 无 | 请求 bridge 停止 |

## 目录结构

```text
D:\ansys-workbench-mcp\
├── mcp_server.py                  # MCP server,运行在 Codex 外部进程中
├── ansys_workbench_bridge.wbjn    # Workbench 侧 bridge journal
├── icem_cfd_bridge.tcl            # ICEM CFD 侧常驻 Tcl bridge
├── stop_mcp.py                    # 发送停止信号
├── requirements.txt               # Python 依赖
├── .mcp.json                      # MCP 客户端配置示例
├── commands\                      # MCP server 写入命令
├── results\                       # Workbench bridge 写回结果
├── scripts\                       # bridge 执行临时脚本
├── icem\                          # ICEM 命令、结果、状态和日志(运行时生成)
├── runs\                          # 示例工程和求解输出
├── tests\                         # Python IPC 和工具注册测试
├── status.json                    # bridge heartbeat 状态
├── mcp.log                        # bridge 日志
└── stop.flag                      # 停止信号文件
```

运行时目录和文件可能会随使用增加。`mcp.log` 和 `status.json` 是状态文件,不建议作为业务代码改动提交。

## 故障排查

- **Codex 看不到工具**
  - 检查 `%USERPROFILE%\.codex\config.toml` 是否配置了 `mcp_servers.ansys-workbench`
  - 确认 `command` 指向 `.venv\Scripts\python.exe`
  - 重启 Codex

- **`check_ansys_installation` 显示路径不存在**
  - 检查 Ansys 实际安装路径
  - 修改 `ANSYS_RUNWB2`、`ANSYS_MECHANICAL`、`ANSYS_MAPDL`、`ANSYS_FLUENT`、`ANSYS_CFX_SOLVE`、`ANSYS_CFX_PRE`、`ANSYS_ICEM_CFD`

- **bridge 状态是 running 但命令超时**
  - 调用 `stop_workbench_bridge`
  - 再调用 `start_workbench_bridge`
  - 查看 `D:\ansys-workbench-mcp\status.json` 的时间戳是否更新
  - 查看 `D:\ansys-workbench-mcp\mcp.log`

- **Workbench 启动了但没有响应**
  - 手动在 Workbench 中运行 `File -> Run Script... -> ansys_workbench_bridge.wbjn`
  - 确认没有旧的 `stop.flag`
  - 确认 `ANSYS_WORKBENCH_MCP_HOME` 指向项目目录

- **ICEM 启动了但 `check_icem_connection` 超时**
  - 不要连接一个普通方式启动的旧 ICEM 窗口;调用 `start_icem_bridge` 启动带 Tcl bridge 的新会话
  - 查看 `D:\ansys-workbench-mcp\icem\icem_bridge.log`
  - 确认 `icem_cfd_bridge.tcl` 存在,并检查许可证是否成功签出
  - 如果 GUI 环境有问题,先用 `start_icem_bridge(batch=true)` 验证无界面连接

- **Fluent Workbench 模板找不到**
  - 先使用 `run_fluent_journal`
  - 或调用 `probe_workbench_analysis_templates_live` 查看本机模板名
  - 如果知道实际模板名,用 `template_name` 参数覆盖

- **直接批处理运行时间很长**
  - 增大工具的 `timeout_seconds`
  - 对 Fluent/CFX/MAPDL 先用小模型验证 journal 或输入文件

## 已验证

在本机已经验证:

- MCP stdio 可以列出工具
- Ansys 2025 R1 路径检查正常
- ICEM CFD 2025 R1 GUI 和 batch 常驻桥均可 ping、执行 Tcl 并正常停止
- ICEM Tcl 8.4.11 会话中可发现 `ic_*` 和 `ic_hex_*` 命令
- `run_icem_replay` 可执行不含 `exit` 的 Replay 文件并返回结果
- Workbench bridge 可以启动并通过 ping 响应
- Workbench 会话内脚本可以执行并返回输出
- 可探测 Workbench 分析模板
- 可创建稳态热、瞬态热、静力、瞬态结构、模态、谐响应、响应谱、随机振动和 CFX 系统
- Fluent 可执行文件存在,推荐通过 journal/TUI 自动化
- CFX solver 可执行文件存在,可通过 `.def` 直接运行
- 稳态热 demo 可以创建并求解

## 许可证

本项目使用 MIT License,详见 [LICENSE](LICENSE)。