
ETABS MCP
io.github.Moha2005269由 GitHub 账号 Moha2005269 发布v0.3.2更新于 Nov 8, 2026
Agentic MCP server for CSI ETABS v22+: model, load, analyse, design and inspect structures.
概览
让 AI 助手通过官方 ETABS API 驱动 CSI ETABS v22+,完成建模、加载、分析、设计与结构检查。
- 可以做什么
- 管理 ETABS 会话:列出安装、连接、查看状态、断开,并可同时驱动多个实例。
- 建模与编辑:楼层、轴网、框架、面对象、点、截面、材料、支座,并可一次调用生成整栋建筑。
- 定义荷载与抗侧体系:荷载模式、组合、ASCE 7 地震与风荷载、反应谱、质量源、刚性隔板。
- 运行分析与设计,读取结果、D/C 比、混凝土与剪力墙设计,以及层间位移、不规则性等规范检查。
- 读写交互式数据库表格,渲染或截取视图,导出 .e2k 模型与 Markdown 设计报告。
- 用纯 JSON 搜索、描述并调用约 1,300 个 ETABS API 方法,支持批量调用。
- 适用场景
- 适合在 Windows 上已安装正版 ETABS 的环境中,让助手生成并迭代建筑模型、运行分析与规范校核,或把原本在图形界面里手工完成的重复性 ETABS 工作自动化。
- 运行要求
- Windows 桌面环境,已安装并授权的 ETABS 22 或更新版本,Python 3.10+ 与 .NET 8 Desktop Runtime(随 ETABS 22+ 安装);可从 PyPI 安装或用 uvx 运行。可选环境变量如 ETABS_MCP_CONNECT_MODE、ETABS_MCP_READ_ONLY、ETABS_MCP_TOKEN 用于配置连接、安全与 HTTP 认证。长时间分析可能需要调高客户端的工具超时。
安装
在 SourceWeft 中
- 打开 控制台中的 ETABS MCP,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Rendered from a live ETABS 23 session: every member, deflection and D/C ratio is real. MP4
etabs-mcp
Your AI agent, inside ETABS.
An agentic Model Context Protocol server for CSI ETABS v22+. Claude Code, Codex, Factory Droid, Cursor and any other MCP client can model, load, analyse, design and inspect structures the way an engineer does, through the official ETABS API, with every call checked against the real signatures.
[Python] [ETABS] [MCP] [Tests] [License: Apache-2.0]
Quick start · Tools · How it works · Testing · Configuration
Why
ETABS has a huge automation API: 143 interfaces, 1,293 reachable methods, 58 enums. It's also full of
ref arrays, status codes and silent quirks. Agents should be designing buildings, not wrestling with COM marshalling.
etabs-mcp gives agents two layers:
Highlights
Quick start
Requirements: Windows · ETABS 22 or newer (licensed) · Python 3.10+ · the .NET 8 Desktop Runtime (installed with ETABS 22+).
Install from PyPI:
Or run it without installing, using uv:
Claude Desktop, one click: download etabs-mcp-<version>-py3XX.mcpb for your Python version from the
latest release and open it. Claude Desktop installs
the extension with every dependency bundled.
Check that it finds ETABS:
Connect your agent
Claude Code
Analyses can take minutes on big models; raise the tool timeout with MCP_TOOL_TIMEOUT=600000.
OpenAI Codex
~/.codex/config.toml
Factory Droid · Cursor · Claude Desktop · Windsurf · any MCP client
HTTP (remote agents, multiple clients)
Then just ask:
"Model a 2-storey steel frame, 2×1 bays of 6 m × 5 m, W14X90 columns, W18X35 beams, 200 mm slab. Apply 1.5 kPa SDL and 3 kPa live, run the analysis, report T₁, wind drift and the worst steel D/C ratio, and show me the 3D view."
The server connects on its own: it attaches to a running ETABS, or launches one.
71 tools
Plus resources (etabs://api/interfaces, etabs://api/interface/{name}, etabs://api/enum/{name},
etabs://server/info) and a prompt (etabs_build_and_check) that walks an agent through the full workflow.
Example: anything the curated tools don't cover
What the agent sees
The film above is cut from one recorded session. An agent built a 6-storey, 4×3-bay braced steel building
through etabs-mcp, analysed it, ran the AISC 360-16 check, found 48 overstressed girders, upsized them,
and re-ran everything until no member was over capacity.
etabs_render_view
The agent's own view of the model, drawn from its data. It works with ETABS hidden, never takes focus, and shows what the ETABS API cannot switch the GUI to.
[The same model in the real ETABS window, captured by etabs_screenshot]The same model in ETABS itself, captured by the agent with etabs_screenshot.
How it works
Reverse-engineering the API, not ETABS. This server stays on the official, documented OAPI and never patches or decompiles the ETABS engine. Its API surface was mapped from the shipped interop assembly:
- REA static metadata analysis of
ETABSv1.dll: 365 types, 3,275 method defs, 14,752 parameters. - A reflection dumper (
tools/ApiDump) emits every public interface, signature, ByRef flag, default and enum intoetabs_api_spec.json. - Cross-check: reflection and raw metadata agree exactly (e.g.
cFrameObj+cAnalysisResults+cDatabaseTables= 136 methods + 1 property accessor = REA's 137). - At runtime the server re-reflects the loaded DLL, so validation always matches the ETABS you run.
Engineering details that make it "just work":
- Typed marshalling. pythonnet boxes Python
intasPyIntinsideobject[], which reflection rejects forInt32. Every argument is routed through a one-element typed array andArray.Copy, so ETABS gets realInt32/Double/enum boxes and ByRef arrays. - One thread. ETABS and COM proxies aren't thread-safe; every call is serialised on a single worker.
- Lost connections (ETABS closed or crashed) are detected from HRESULTs and reported with a reconnect hint.
- ETABS quirks handled:
- Library imports that ETABS silently renames (
W14X90→W14X90-1) are detected and renamed back. - After table edits, ETABS reports the model file as the temporary
.$et; saving is mapped back to.EDB. - Unitless result columns (drift ratios, mass ratios) are turned into numbers, while IDs like
Label: "1"stay strings. - GPU-drawn viewports are blank to
PrintWindow, so screenshots come from the composed screen and focus is handed back afterwards.
- Library imports that ETABS silently renames (
Tested against real ETABS
Offline (CI): 58 tests. Every curated tool runs through FastMCP against a fake backend that resolves and
coerces every call against the real ETABSv1.dll catalog. A wrong method or parameter name fails exactly as it
would in ETABS.
Live end-to-end: tests/live/test_live_e2e.py starts the server as a real
MCP subprocess, launches ETABS 23.3.2, and runs 42 tool calls with 0 failures in ~42 s:
Live v0.2 suite: tests/live/test_live_v2.py drives every new tool against
ETABS on a 3-storey, 63-member model:
Live v0.3 suite: tests/live/test_live_v3.py:
Showcase run (tools/record_demo_data.py): a 6-storey braced steel building,
354 members and 72 slabs. LL ΣFz = 9,720 kN (= 3 kPa × 30 m × 18 m × 6 floors, exact), wind ΣFx = 432 kN
(= 18 kN × 24 joints, exact), T₁ = 1.71 s. The redesign loop took max D/C from 1.22 to 0.91.
Configuration
Publishing (maintainers)
Tagging vX.Y.Z runs release.yml, which tests, builds the wheel, sdist and
.mcpb bundles, and publishes the GitHub release. PyPI and the MCP Registry use tokenless trusted publishing:
add a trusted publisher on pypi.org (this repo, workflow release.yml, environment pypi), then set the
repository variable PUBLISH_PYPI=true. Later tags publish to PyPI and list the server in the MCP Registry.
Version support
Safety model
Menu commands run through etabs_menu need confirm=true as well, and over HTTP every request must carry the
bearer token.
Project layout
Troubleshooting
install_not_found: runetabs-mcp --list-installs; setETABS_MCP_INSTALL_DIRif ETABS lives somewhere unusual.- Attaching does nothing: wait until ETABS has finished starting and close any modal dialogs; or pass
pidtoetabs_connect. - Edits fail after analysis: the model is locked.
etabs_unlock_model(confirm=true)deletes results and unlocks it. - Long analyses time out in the client: raise the client's MCP tool timeout (see Connect your agent).
- Switching ETABS major versions: restart the server; one process hosts one
ETABSv1.dll.
Apache-2.0 © Moha2005269 · ETABS is a trademark of Computers and Structures, Inc. This project is independent and not affiliated with or endorsed by CSI.
来源:README.md,提交 288df2b
工具
0版本历史
1- v0.3.2最新Oct 18, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分