amesim-mcp
MCP server that exposes Siemens Simcenter Amesim's Circuit API as tools, enabling circuit creation, wiring, parameter setting, simulation, and result retrieval via natural language.
README
amesim-mcp
An MCP server that exposes Siemens Simcenter Amesim's Circuit API as tools for Claude (Desktop or Code) — build circuits, wire components, set parameters, compile, run simulations, and read back results, all from a chat.
Unofficial, independent project. Not affiliated with or endorsed by Siemens. "Simcenter Amesim" is a Siemens trademark.
How it works
Amesim's Python API only exists inside AMEPython.exe, an embedded Python
3.6 interpreter shipped with Amesim. Two problems rule out just running the
MCP server directly under AMEPython.exe:
AMEPython.exeprints an unconditionalStarting Python ...banner to stdout with no way to silence it — which would corrupt the JSON-RPC stream an MCP stdio server needs.AMERunSimulation(and apparently other run-management calls) hangs forever when invoked from any thread other than the process's main thread. Siemens' ownscripting/python/serve_api.pyexample serves RPyC connections on background threads (ThreadedServer), so it hits this hang too.
So this project splits into two processes:
- MCP server (
amesim_mcp/server.py) — a normal Python 3.12+ process, the one Claude talks to over stdio. - Worker (
amesim_mcp/worker_entry.py) — spawned insideAMEPython.exe, running an RPyCOneShotServer(single connection, served synchronously on the main thread — this is what avoids the hang). Its stdout/stderr (banner included) is redirected toamesim_worker.log, never touching the MCP server's own stdio.
The MCP server talks to the worker as an ordinary RPyC client over a local
TCP port (default 18861).
Because AMEPython.exe's embedded interpreter has no pip/internet
access, vendor/ bundles pre-built copies of the packages the worker
needs (pywin32, rpyc, plumbum, adodbapi) — see
NOTICE.md for their original licenses. The worker process gets
vendor/ prepended to its PYTHONPATH when spawned.
Requirements
- Windows, with Simcenter Amesim installed (2021.1 and 2404 are configured by default — see below to add/change a version).
- Python 3.12+ on your normal system Python (separate from Amesim's embedded 3.6) to run the MCP server itself.
- Claude Desktop or Claude Code (or any other MCP-compatible client).
Install
git clone <this-repo-url>
cd amesim-mcp
py -3.13 -m pip install -e .
(Any Python ≥3.12 works — py -3.13 is just what was used to develop
this.)
If your Amesim install lives somewhere other than
C:\Program Files\Simcenter\<version>\Amesim, or you use a version other
than 2021.1 / 2404, edit VERSION_DIRS in
amesim_mcp/amesim_api.py:
VERSION_DIRS = {
"2021.1": r"C:\Program Files\Simcenter\2021.1\Amesim",
"2404": r"C:\Program Files\Simcenter\2404\Amesim",
}
Configure your MCP client
Claude Desktop — add to %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"amesim": {
"command": "py",
"args": ["-3.13", "-m", "amesim_mcp.server"]
}
}
}
Claude Code / other project-scoped MCP clients — copy the example and edit the path:
cp .mcp.json.example .mcp.json
{
"mcpServers": {
"amesim": {
"command": "python",
"args": ["-m", "amesim_mcp.server"],
"cwd": "C:/path/to/amesim-mcp"
}
}
}
.mcp.json is machine-specific (absolute path) and is gitignored — don't
commit it.
Usage
A typical session:
connect → create_circuit → add_component → change_submodel →
connect_two_ports → set_parameter_value → generate_code →
run_simulation → get_variable_values → save_circuit → disconnect
| Tool | Purpose |
|---|---|
connect(version) |
Start/attach to the Amesim worker ("2021.1" or "2404") |
disconnect() |
Release the license token, stop the worker |
status() |
Connection state + Circuit API version |
execute_python(code) |
Run arbitrary Python in the worker's persistent namespace — ame_apy and amesim are pre-imported. Use this for anything without a dedicated tool, and to look up exact signatures with execute_python("help(ame_apy.SOME_FUNCTION)") |
create_circuit(name) |
Create a new circuit |
open_ame_file(path) |
Open an existing .ame file |
save_circuit() |
Save the active circuit |
close_circuit(save) |
Close the active circuit |
add_component(icon_name, alias, x, y) |
Add a component to the sketch |
move_component(alias, x, y) |
Move a component |
rotate_component(alias, quarter_turns) |
Rotate a component |
flip_component(alias) |
Mirror a component |
remove_component(alias) |
Remove a component |
connect_two_ports(alias1, port1, alias2, port2) |
Wire two ports together |
remove_line(alias) |
Remove a connection line |
create_supercomponent(...) |
Group components into a reusable sub-circuit |
change_submodel(alias, submodel_name, submodel_path) |
Assign a submodel |
get_parameter_value(data_path) / set_parameter_value(data_path, value) |
Read/write a parameter or state's initial value |
get_parameter_infos(data_path) |
Type, title, unit of a parameter |
generate_code() |
Compile the active circuit |
set_run_parameter(name, value) |
Set a run/simulation parameter |
run_simulation() |
Run a temporal simulation |
get_variable_values(data_path) |
Time-series [time, value] pairs from the last run |
get_variable_infos(data_path) |
Metadata about a variable |
connect() checks out one Amesim license token for the whole session —
call disconnect() when done so it doesn't block your own interactive
Amesim usage.
Troubleshooting
- "AMEPython.exe not found for version ..." —
VERSION_DIRSinamesim_api.pydoesn't match where Amesim is actually installed on your machine. - Worker seems to hang or crash silently — check
amesim_worker.login the project root; the worker's stdout/stderr (including any Amesim-side traceback) lands there. - Stuck holding a license token — call
disconnect(), or kill theAMEPython.exeprocess directly if the MCP server itself is gone.
License
MIT for amesim_mcp/ — see LICENSE. vendor/ bundles
third-party packages under their own licenses — see NOTICE.md.
amesim-mcp (한국어)
MCP 프로토콜로 Siemens Simcenter Amesim의 Circuit API를 Claude(Desktop/Code)의 도구로 노출하는 서버입니다. 채팅만으로 회로를 만들고, 컴포넌트를 배치·연결하고, 파라미터를 설정하고, 컴파일·시뮬레이션을 실행하고, 결과를 읽어올 수 있습니다.
비공식 개인 프로젝트이며 Siemens와 아무런 제휴·후원 관계가 없습니다. "Simcenter Amesim"은 Siemens의 상표입니다.
동작 원리
Amesim의 Python API는 Amesim에 내장된 Python 3.6 인터프리터인
AMEPython.exe 안에서만 존재합니다. MCP 서버를 AMEPython.exe 위에서
그대로 돌릴 수 없는 이유가 두 가지 있습니다.
AMEPython.exe는 시작할 때Starting Python ...배너를 표준출력으로 무조건 출력하며 끌 방법이 없습니다. MCP stdio 서버가 이 프로세스로 그대로 동작하면 이 배너가 JSON-RPC 스트림을 깨뜨립니다.AMERunSimulation(및 다른 실행 관련 API로 보이는 함수들)은 메인 스레드가 아닌 다른 스레드에서 호출하면 무한정 멈춥니다. Siemens가 제공하는scripting/python/serve_api.py예제는 RPyC 연결을 백그라운드 스레드에서 처리하는ThreadedServer를 쓰기 때문에 그대로 쓰면 이 문제를 그대로 겪습니다.
그래서 이 프로젝트는 프로세스를 두 개로 나눕니다.
- MCP 서버 (
amesim_mcp/server.py) — 일반 Python 3.12+ 프로세스로, Claude와 stdio로 통신합니다. - 워커(worker) (
amesim_mcp/worker_entry.py) —AMEPython.exe안에서 실행되며, RPyC의OneShotServer(연결 1개만, 메인 스레드에서 동기적으로 처리 — 이게 바로 위 hang 문제를 피하는 방법입니다)를 띄웁니다. 이 워커의 표준출력/에러(배너 포함)는amesim_worker.log로 리다이렉트되어 MCP 서버 자신의 stdio에는 절대 섞이지 않습니다.
MCP 서버는 로컬 TCP 포트(기본값 18861)로 이 워커에 일반적인 RPyC
클라이언트처럼 접속합니다.
AMEPython.exe의 내장 인터프리터는 pip도, 인터넷 접근도 안 되기 때문에
워커가 필요로 하는 패키지들(pywin32, rpyc, plumbum, adodbapi)의
빌드된 사본을 vendor/에 함께 담아두었습니다 (각 패키지의 원 라이선스는
NOTICE.md 참고). 워커 프로세스를 띄울 때 vendor/가
PYTHONPATH 맨 앞에 추가됩니다.
요구 사항
- Windows, Simcenter Amesim 설치 (기본 설정은 2021.1과 2404 — 다른 버전/경로를 쓰려면 아래 참고).
- MCP 서버 자체를 돌릴 Python 3.12+ (Amesim에 내장된 3.6과는 별개의, 시스템에 설치된 일반 Python).
- Claude Desktop 또는 Claude Code (다른 MCP 호환 클라이언트도 가능).
설치
git clone <이 저장소 URL>
cd amesim-mcp
py -3.13 -m pip install -e .
(3.12 이상이면 어떤 Python이든 됩니다 — py -3.13은 개발할 때 쓴 버전일
뿐입니다.)
Amesim이 C:\Program Files\Simcenter\<버전>\Amesim이 아닌 다른 경로에
설치되어 있거나, 2021.1 / 2404가 아닌 다른 버전을 쓴다면
amesim_mcp/amesim_api.py의 VERSION_DIRS를
수정하세요.
VERSION_DIRS = {
"2021.1": r"C:\Program Files\Simcenter\2021.1\Amesim",
"2404": r"C:\Program Files\Simcenter\2404\Amesim",
}
MCP 클라이언트 설정
Claude Desktop — %APPDATA%\Claude\claude_desktop_config.json에 추가:
{
"mcpServers": {
"amesim": {
"command": "py",
"args": ["-3.13", "-m", "amesim_mcp.server"]
}
}
}
Claude Code 등 프로젝트 단위 MCP 클라이언트 — 예제 파일을 복사해서 경로만 바꿔주세요.
cp .mcp.json.example .mcp.json
{
"mcpServers": {
"amesim": {
"command": "python",
"args": ["-m", "amesim_mcp.server"],
"cwd": "C:/path/to/amesim-mcp"
}
}
}
.mcp.json은 절대경로가 들어가는 개인 환경 설정 파일이라 .gitignore에
포함되어 있습니다 — 커밋하지 마세요.
사용법
일반적인 사용 흐름:
connect → create_circuit → add_component → change_submodel →
connect_two_ports → set_parameter_value → generate_code →
run_simulation → get_variable_values → save_circuit → disconnect
| 도구 | 설명 |
|---|---|
connect(version) |
Amesim 워커 시작/연결 ("2021.1" 또는 "2404") |
disconnect() |
라이선스 토큰 반납, 워커 종료 |
status() |
연결 상태 + Circuit API 버전 확인 |
execute_python(code) |
워커의 지속되는(persistent) 네임스페이스에서 임의 Python 코드 실행 — ame_apy, amesim이 이미 import되어 있음. 전용 도구가 없는 작업이나, execute_python("help(ame_apy.함수이름)")으로 정확한 시그니처를 확인할 때 사용 |
create_circuit(name) |
새 회로 생성 |
open_ame_file(path) |
기존 .ame 파일 열기 |
save_circuit() |
현재 회로 저장 |
close_circuit(save) |
현재 회로 닫기 |
add_component(icon_name, alias, x, y) |
스케치에 컴포넌트 추가 |
move_component(alias, x, y) |
컴포넌트 이동 |
rotate_component(alias, quarter_turns) |
컴포넌트 회전 |
flip_component(alias) |
컴포넌트 좌우 반전 |
remove_component(alias) |
컴포넌트 삭제 |
connect_two_ports(alias1, port1, alias2, port2) |
두 포트를 선으로 연결 |
remove_line(alias) |
연결선 삭제 |
create_supercomponent(...) |
컴포넌트들을 재사용 가능한 슈퍼컴포넌트로 묶기 |
change_submodel(alias, submodel_name, submodel_path) |
서브모델 지정 |
get_parameter_value(data_path) / set_parameter_value(data_path, value) |
파라미터/초기 상태값 읽기·쓰기 |
get_parameter_infos(data_path) |
파라미터의 타입/제목/단위 조회 |
generate_code() |
현재 회로 컴파일 |
set_run_parameter(name, value) |
실행/시뮬레이션 파라미터 설정 |
run_simulation() |
시간 영역 시뮬레이션 실행 |
get_variable_values(data_path) |
마지막 실행의 [time, value] 시계열 값 |
get_variable_infos(data_path) |
변수 메타데이터 조회 |
connect()는 세션 동안 Amesim 라이선스 토큰을 하나 점유합니다. 다 쓰면
disconnect()를 호출해서 본인의 대화형 Amesim 사용을 막지 않도록 하세요.
문제 해결
- "AMEPython.exe not found for version ..." —
amesim_api.py의VERSION_DIRS경로가 실제 설치 경로와 다릅니다. - 워커가 멈춘 것 같거나 조용히 죽는 경우 — 프로젝트 루트의
amesim_worker.log를 확인하세요. 워커의 표준출력/에러(Amesim 쪽 트레이스백 포함)가 여기 남습니다. - 라이선스 토큰을 반납하지 못하고 물려있는 경우 —
disconnect()를 호출하거나, MCP 서버 자체가 죽었다면AMEPython.exe프로세스를 직접 종료하세요.
라이선스
amesim_mcp/는 MIT 라이선스입니다 — LICENSE 참고. vendor/는
각 패키지의 원 라이선스를 그대로 유지합니다 — NOTICE.md 참고.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。