Skip to main content

EDI MCP 服务

每台安装 EDI 的电脑运行一个本地 MCP 服务,将 EDA-PMDS/EDI 的 gRPC 接口、命令行工具和 ANSYS HFSS 封装为 26 个 MCP 工具, 支持 SSEstdio 两种传输方式,使 AI 客户端能通过自然语言操作 EDA 工程。


快速开始

1. 安装

方式 A:PyPI(推荐)

pip install edi-mcp

方式 B:源码

git clone <repo-url>
cd mcp-grpc
uv sync

2. 配置 .env

在项目根目录(或运行目录)创建 .env 文件:

EDA_GRPC_SERVER=127.0.0.1:50055
EDI_PATH=C:\Program Files (x86)\EDI\EDI.exe
TURBOCHARTS_PATH=C:\Program Files (x86)\EDI\turbocharts_app.exe
MCP_TRANSPORT=sse
MCP_HOST=127.0.0.1
MCP_PORT=8026

# 以下可选,用于聊天客户端 AI 对话
LLM_API_KEY=sk-xxx
LLM_BASE_URL=https://api.deepseek.com
LLM_MODEL=deepseek-chat

3. 前置条件

  • EDA gRPC 服务可用:netstat -ano | findstr 50055
  • .epp 工程文件存在
  • Turbocharts 功能需要 turbocharts_app.exe

4. 启动

HTTP 模式(推荐) — 多个本地客户端共享一个进程:

# PyPI 安装
edi-mcp --transport sse

# 源码运行
cd D:\GitLabCode\mcp-grpc
uv run python start_servers.py

输出示例:

==================================================
  EDI MCP v0.1.0
  UI:   http://127.0.0.1:8026/ui
  MCP:  http://127.0.0.1:8026/sse
  Tools: 26 loaded
  gRPC: 127.0.0.1:50055 [ONLINE]
  Close window to stop
==================================================

启动后自动监听 127.0.0.1:8026

  • 所有本机客户端通过 http://127.0.0.1:8026/sse 连接
  • EDI gRPC 操作由全局锁保证串行
  • Turbocharts 由信号量保证同一时间一个进程
  • /health 健康检查 — 返回 EDA gRPC 和 Turbocharts 状态
  • /ui 聊天客户端 — 自然语言驱动 26 个工具,带工具面板和系统主题
  • /chat 聊天 API — POST {"message":"..."} 返回 LLM + 工具执行结果
  • 聊天客户端文件:scripts/chat_client.html(独立 HTML,可单独分发)

stdio 模式 — 由 MCP 客户端管理进程生命周期,适合单客户端调试:

# PyPI 安装
edi-mcp --transport stdio

# 源码运行
uv run python start_servers.py --transport stdio

stdio 模式下不能向 stdout 输出任何内容(MCP 协议通道),进程由客户端自动启停。

自定义端口

edi-mcp --port 9000

客户端配置

每台电脑的 127.0.0.1 都指向自己,服务和文件都在本机。

客户端 配置
Claude Code .mcp.json 已配置,/mcp 重载
OpenClaw / Web 名称 eda,Streamable HTTP,http://127.0.0.1:8026/sse
其他 stdio 客户端 uv --directory D:/GitLabCode/mcp-grpc run python start_servers.py --transport stdio

其他 MCP 客户端通用配置:

{
  "mcpServers": {
    "eda": {
      "command": "uv",
      "args": ["--directory", "D:/GitLabCode/mcp-grpc", "run", "python", "start_servers.py", "--transport", "stdio"],
      "env": { "EDA_GRPC_SERVER": "127.0.0.1:50055" }
    }
  }
}

工具参考(26 个)

工程管理

工具 说明 参数
list_epp_projects 扫描文件夹中的 .epp 工程 folder_path
create_blank_epp 创建空白 .epp 工程(文件夹+结构) folder_path, project_name
open_edi_project 打开 .epp 工程 project_path, timeout_seconds(默认 60)
close_edi_project 关闭工程 project_path, need_save(默认 false)
list_project_components 列出工程中所有元件 project_path, schematic_name, component_type, name_contains
get_component_parameters 查询单个元件的全部参数 project_path, component_id, schematic_name, include_hidden
get_project_summary 工程概览(元数据/原理图/仿真) project_path, include_component_types, include_latest_result

仿真

工具 说明 参数
simulate_project 执行工程仿真(同步) project_path
start_simulation_async 启动异步仿真 project_path
get_simulation_async_status 查询异步仿真状态 task_id
get_simulation_async_result 获取异步仿真结果 task_id
simulate_netlist 仿真网表,返回 RAW 结果 netlist_path
simulate_netlist_with_ads 调用 ADS 仿真控制器 netlist_path

导出与分析

工具 说明 参数
export_project_netlist 查看/导出工程网表 project_path, timeout_seconds(默认 60)
capture_schematic 截取原理图为图片 project_path, img_path, timeout_seconds(默认 60)

模型与启动

工具 说明 参数
replace_models_from_csv 按 CSV 批量替换模型 project_path, csv_path, timeout_seconds(默认 60)
launch_edi 启动 EDI 客户端 edi_path, wait_for_grpc(默认 true), wait_timeout

ANSYS HFSS

工具 说明 参数
open_hfss_project 启动 AEDT 并打开 .aedt 项目(COM 优先/验证) project_path, aedt_path, wait_timeout
close_hfss_project 关闭 AEDT 项目(COM 优先/可强制) project_name, save_before_close, force
launch_aedt 启动 AEDT(已运行检测+就绪等待) aedt_path, wait_timeout
get_hfss_project_info 获取项目列表/活动项目/设计
start_hfss_analysis_async 异步启动 HFSS 仿真 project_path, design_name, setup_name
get_hfss_analysis_status 查询 HFSS 仿真状态 task_id, refresh_from_aedt

图片

工具 说明 参数
show_image 读取本地图片,返回 MCP ImageContent image_path

图表

工具 说明 参数
compare_simulation_results 多 RAW 同曲线对比叠图 result_paths, curve, img_path, chart_type, labels, dependency
turbocharts_convert ADS RAW → 曲线图 + CSV raw_path, img_path, chart_type, csv_path, linename, dependency, ac_config

自然语言调用示例:

帮我看看 C:/.../EDI-Workspace 下面有哪些 .epp 工程
帮我打开 EDA 工程 C:/.../EDI_TEST.epp
帮我查看这个工程的网表
帮我看看这个工程有哪些元件
帮我对这个工程执行仿真
帮我把 result_tr.raw 转成 S 参数增益曲线图,输出 gain.png,曲线 DB_S[2,1],依赖轴 freq

turbocharts_convert 参数详解

linename单位_曲线名[端口],多条用 & 分隔:

DB_S[2,1](增益) DB_S[1,2](反向增益) real_nf(1)(噪声) VSWR_S[1,1](驻波) real_delayS[2,1](时延)
APS_S[2,1](附加相移) MAS_S[2,1](衰减态) MV_S[2,1](幅度波动) PSS_S[2,1](移相态)

chart_typeSP / HB / XDB

ac_configac_type#bit#data#nv_type#nv_value

含义
ac_type phase(相位)或 att(衰减) phase
bit 精度位数 3
data 曲线名 S[2,1]
nv_type fv(固定间隔)或 cl(完整列表) fv
nv_value 间隔值或逗号分隔的值列表 0.1

项目结构

├── proto/                       # protobuf
│   ├── ecserver.proto
│   ├── ecserver_pb2.py
│   └── ecserver_pb2_grpc.py
├── servers/
│   ├── mcp_instance.py          # 全局 MCP 实例(装饰器注册)
│   ├── registry_server.py       # 工具导入入口 + Web 路由注册
│   ├── chat_service.py          # 聊天服务(会话管理/LLM 多轮调用/工具闭环)
│   ├── web_routes.py            # Web 路由(/health /chat /ui /tools/list)
│   ├── image_tools.py           # 图片工具 — show_image(1 工具)
│   ├── eda/
│   │   ├── config.py            # 配置 + validate_file + ProjectReader + S-expression
│   │   ├── grpc_client.py       # gRPC 通信(带 EDA 全局锁)
│   │   ├── project_manage.py    # 工程管理(7 工具)
│   │   ├── simulation.py        # 仿真(6 工具)
│   │   ├── design_export.py     # 网表/截图(2 工具)
│   │   ├── model_replace.py     # 模型替换(1 工具)
│   │   └── edi_launcher.py      # 启动 EDI(1 工具)
│   ├── turbocharts/
│   │   ├── config.py             # 公共函数(run_turbocharts)
│   │   ├── convert_raw.py        # RAW 转图(1 工具)
│   │   └── compare_results.py    # 仿真对比(1 工具)
│   └── ansys/                     # ANSYS 工具(6 个)
│       ├── config.py              # 公共工具(进程检测/COM附着/锁文件)
│       ├── project_manage.py      # 工程管理 + 信息查询
│       └── run_analysis.py        # 异步仿真
├── start_servers.py              # 入口
├── tests/                       # 测试套件
├── scripts/
│   ├── build.ps1                 # 打包脚本
│   └── edi_mcp_server.spec       # PyInstaller 配置
├── .mcp.json                    # Claude Code 配置
├── .env                         # 配置文件(不提交 Git)
└── pyproject.toml

常见问题

端口被占用

netstat -ano | findstr 8026          # 查看占用
taskkill -f -pid <PID>               # 关闭进程

检查 EDA 状态

netstat -ano | findstr 50055         # gRPC:有 LISTENING = 运行中
tasklist | findstr EDI.exe           # EDI 进程

启动失败

  • 确认 .envEDA_GRPC_SERVEREDI_PATHTURBOCHARTS_PATH 配置正确
  • uv sync 确认依赖已安装
  • 确认 EDA gRPC 服务已启动

健康检查

curl http://127.0.0.1:8026/health
# → {"status":"ok", "mcp_ready":true, "eda_grpc_ready":true}

注意事项

  • project_path 必须是存在的 .epp 文件
  • timeout_seconds 必须 > 0,超出操作上限会报错(open/close 300s, simulate 3600s, turbocharts 600s)
  • stdio 模式下不要向 stdout 输出调试信息
  • .env 配置在服务启动时自动加载

开发

运行测试

uv run python tests/test_project_reader.py
uv run python tests/test_component_tools.py
uv run python tests/test_turbocharts_runner.py
uv run python tests/test_health.py
uv run python tests/test_tool_registry.py

运行完整测试套件

uv run pytest -q -p no:cacheprovider

打包发布

PyPI 发布(源码包):

首次需要创建 .pypirc 配置 PyPI 凭证(已加入 .gitignore,不会提交):

[pypi]
repository = https://upload.pypi.org/legacy/
username = __token__
password = pypi-xxxxxxxxxxxx

之后发布只需:

uv build
uv publish

PyInstaller 打包(免安装二进制包):

powershell -File scripts/build.ps1
# 输出: dist/edi-mcp/(含 edi_mcp_server.exe + start_server.bat + .env,约 90 MB)

添加新工具

  1. 在对应分类文件中添加函数 + @mcp.tool() 装饰器
  2. servers/registry_server.pyimport 该模块(触发装饰器注册)

重新生成 proto

python -m grpc_tools.protoc -I proto --python_out=proto --grpc_python_out=proto proto/ecserver.proto
# 编辑 proto/ecserver_pb2_grpc.py 第 5 行:import ecserver_pb2 → from proto import ecserver_pb2

相关文档

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

edi_mcp-0.1.1.tar.gz (228.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

edi_mcp-0.1.1-py3-none-any.whl (79.0 kB view details)

Uploaded Python 3

File details

Details for the file edi_mcp-0.1.1.tar.gz.

File metadata

  • Download URL: edi_mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 228.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for edi_mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b2c2e0e4f430f43a5d9aa51154d3f10e7c93b9f483dcf2c8c67034afea346d6f
MD5 c420130d9c45e7540de3668bf85aea8d
BLAKE2b-256 afa2c382095d58674259b08fa9c4fa91069a49e477a5808d3105afc9d1db7362

See more details on using hashes here.

File details

Details for the file edi_mcp-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: edi_mcp-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 79.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.27 {"installer":{"name":"uv","version":"0.11.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for edi_mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a128057968c3e6ef449464d4f3f69179ac268095f4a01d08d429a667280b680f
MD5 828ee907a446e024954ce354495aa4c1
BLAKE2b-256 15a3a165c58ab8821e480f2345c0d254a580b6734e3a11f150f6a4ee73f55b78

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page