内容
# FDTD MCP
MCP 服务器,用于 [Lumerical FDTD](https://www.ansys.com/products/optics/fdtd) 自动化。让 AI 助手通过模型上下文协议读取、编辑、运行和分析 FDTD 模拟。
> [中文说明](README_zh.md)
## 架构
```
AI Assistant --MCP stdio--> server.py (系统 Python ≥3.10)
│ 子进程 stdin/stdout
bridge.py (Lumerical 嵌入式 Python 3.6.8)
│ lumapi
Lumerical FDTD 引擎
```
双进程设计隔离了 MCP 协议(需要现代 Python)与 Lumerical API(仅在捆绑的 Python 3.6.8 上运行)。桥接器通过 stdin/stdout 上的行分隔 JSON 进行通信。
## 安装
**先决条件:** Python ≥ 3.10, [Lumerical FDTD](https://www.ansys.com/products/optics/fdtd)
```bash
# 1. 克隆并安装
git clone https://github.com/<user>/fdtd-mcp.git && cd fdtd-mcp
pip install .
# 2. 打印注册命令(自动检测 Lumerical 路径)
python install.py
# 3. 运行打印的命令,例如:
# claude mcp add fdtd -- python -m fdtd_mcp.server --lumerical-home "D:/Software/Lumerical/v202"
# 4. 重启您的 MCP 客户端
```
### 手动指定路径
如果自动检测失败,请指定 Lumerical 安装路径:
```bash
# 通过环境变量
export LUMERICAL_HOME=/opt/lumerical/v202
# 或通过 CLI 参数在注册命令中
claude mcp add fdtd -- python -m fdtd_mcp.server --lumerical-home "D:/Software/Lumerical/v202"
```
### 其他 MCP 客户端
将以下内容添加到您的客户端的 MCP 服务器配置中:
```json
{
"mcpServers": {
"fdtd": {
"command": "python",
"args": ["-m", "fdtd_mcp.server", "--lumerical-home", "/opt/lumerical/v202"]
}
}
}
```
调整 `--lumerical-home` 以匹配您的安装。
## 工具(21)
| 类别 | 工具 |
|----------|-------|
| 生命周期 | `new`, `open`, `close`, `save` |
| 检查 | `get_scene_info`, `get_script`, `get_parameters`, `get_results`, `get_sweep_info` |
| 编辑 | `set_parameter`, `set_script` |
| 执行 | `execute`, `execute_file` |
| 材料 | `add_material`, `set_material`, `get_material` |
| 运行 | `run`, `run_sweep`, `get_sweep_result` |
| 数据 | `get_result_data`, `get_result_file` |
## 工作流程
### 查看现有项目
```
open("project.fsp")
get_scene_info() → 所有对象 + 属性
get_script("::model") → 设置 + 分析脚本
get_parameters() → 所有参数:{::model:{gap,...}, Cnorm:{...}, ...}
get_sweep_info("dpgap") → 扫描配置
```
### 修改和保存
```
set_parameter("gap", 200e-9)
set_parameter("LR", 0, object="LR_tfsf")
set_script("::model", "analysis", new_code)
save("project_v2.fsp")
```
### 运行和提取结果
```
run()
get_results("::model") → ["dpsource","P_L","P_R","g_lum"]
get_result_data("::model", "g_lum") → {lambda:[...], ...}
get_result_file("DFT", "E", "fields.mat")
```
### 从头开始构建
```
new(dimension="3D", x_span=1e-6, y_span=1e-6, z_span=2e-6)
execute("addtfsf()")
set_parameter("wavelength start", 400e-9, object="TFSF")
set_parameter("wavelength stop", 800e-9, object="TFSF")
execute("addpower()")
set_parameter("monitor type", "3D", object="power")
save("my_sim.fsp")
```
### 自定义材料
```
add_material(type="Sampled 3D data") → {name: "material_1"}
set_material("material_1", "nk data",
[[300e-9,800e-9], [1.52,1.52], [0.001,0.001]])
set_material("material_1", "mesh order", 2)
# 内置材料无需设置:
execute("addrect()")
set_parameter("material", "Au (Gold) - Johnson and Christy", object="rectangle")
```
## 文件
```
fdtd-mcp/
├── README.md
├── README_zh.md
├── LICENSE
├── pyproject.toml
├── install.py
└── fdtd_mcp/
├── __init__.py
├── discovery.py # 自动检测 Lumerical 安装
├── bridge.py # JSON-RPC 桥接器(Lumerical Python 3.6.8)
└── server.py # MCP 服务器(系统 Python)
```
## 需求
- Python ≥ 3.10
- Lumerical FDTD(v202 或更高版本)
- `mcp`