mcpField
E
ETABS MCP

ETABS MCP

本地服务
github.com/Moha2005269科研与教育202 周前更新

关于 ETABS MCP

ETABS MCP 是面向结构工程师及 AI Agent 的 MCP 服务,通过 CSI ETABS 官方 API 建模、加载、分析、设计和检查结构。它提供工程工作流工具,也可按运行版本反射并调用完整 API。

主要功能

  1. 01创建模型并配置结构、材料和荷载
  2. 02运行结构分析与设计检查
  3. 03查询结果、设计数据和数据库表
  4. 04渲染模型视图并查找对象
  5. 05搜索并调用完整 ETABS API
  6. 06支持只读模式与破坏性操作确认

适用场景

  1. 01生成建筑结构模型并施加荷载
  2. 02分析模型并检查漂移和构件设计
  3. 03查看结果并编辑可导入的数据库表
  4. 04通过 API 执行未覆盖的 ETABS 操作

MCP 相关

ETABS MCP 通过 stdio 或 HTTP 向 MCP 客户端暴露 71 个工程工具、ETABS 完整 API 调用、资源和提示词。它连接正在运行的 ETABS,或启动 ETABS。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"moha2005269-etabs": {
"command": "uvx",
"args": [
"etabs-mcp"
]
}
}
}
启动命令uvx etabs-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypietabs-mcp0.3.2

工具

71

收录的工具列表 · 更新于 1 周前

此工具无需参数。

详细介绍

AI Agent 通过 etabs-mcp 在 ETABS 中对一栋 6 层钢结构建筑进行建模、分析、设计和迭代

由实时 ETABS 23 会话渲染:每个构件、挠度和 D/C 比都是真实数据。MP4

etabs-mcp

让你的 AI Agent 进入 ETABS。

面向 CSI ETABS v22+ 的智能体 Model Context Protocol 服务。Claude Code、Codex、Factory Droid、Cursor 及任何 其他 MCP 客户端,都可以通过官方 ETABS API,像工程师一样对结构进行建模、加载、分析、设计和检查, 且每次调用都会根据真实签名进行校验。

Python ETABS MCP Tests License: Apache-2.0

快速开始 · 工具 · 工作原理 · 测试 · 配置


为什么选择它

ETABS 拥有庞大的自动化 API:143 个接口、1,293 个可调用方法、58 个枚举。它还充斥着 ref 数组、状态码和不易察觉的特殊行为。Agent 应该专注于设计建筑,而不是纠结于 COM 编组。

etabs-mcp 为 Agent 提供两个层次:

71 个精选工具面向工程师的工作流:etabs_generate_building、etabs_define_seismic_load、etabs_code_checks、etabs_run_analysis、etabs_get_results、etabs_run_design、etabs_render_view、etabs_find_objects、etabs_edit_table 等。
完整 APIetabs_search_api → etabs_describe_api → etabs_call_api。每个 ETABS 方法都可以通过普通 JSON 调用,并根据当前运行的 ETABS 版本的实时签名进行校验。

亮点

全面覆盖,绝不猜测
搜索全部 1,293 个方法,查看带有枚举值的准确签名,并调用其中任意方法。ByRef 输出会以命名 JSON 的形式返回。

像工程师一样观察
etabs_render_view 可从任意角度离屏绘制模型:变形形状、D/C 比、截面和楼层。etabs_screenshot 可显示真实的 ETABS 窗口。

交互式数据库
读取任意 ETABS 表格,并编辑可导入的表格(更新/追加/删除行,然后应用),同时返回导入日志。

安全设计
破坏性调用需要 confirm=true,内部接口会被屏蔽,且 --read-only 模式会拒绝所有写入操作。工具注释会告知客户端哪些操作是安全的。

适配不同版本
查找所有 ETABS 22/23/24… 安装,加载对应版本的 ETABSv1.dll,并实时反射其 API。旧版本中不存在的方法会明确报错。

为 Agent 打造
错误会附带代码和提示。长度支持 "6 m" 或 "20 ft" 格式,长时间运行的任务会交由后台作业处理,而 etabs_what_changed 可以发现 ETABS 中的手动编辑。


快速开始

**要求:**Windows · ETABS 22 或更高版本(需授权)· Python 3.10+ · .NET 8 Desktop Runtime(随 ETABS 22+ 安装)。

从 PyPI 安装:

pip install etabs-mcp

或者使用 uv 运行,无需安装:

uvx etabs-mcp --list-installs

**Claude Desktop,一键安装:**根据你的 Python 版本,从最新版本下载 etabs-mcp-<version>-py3XX.mcpb 并打开。Claude Desktop 会安装扩展,并包含所有依赖项。

检查是否能找到 ETABS:

etabs-mcp --list-installs
连接你的 Agent
Claude Code
claude mcp add etabs -- etabs-mcp

大型模型的分析可能需要几分钟;请使用 MCP_TOOL_TIMEOUT=600000 延长工具超时时间。

OpenAI Codex

~/.codex/config.toml

[mcp_servers.etabs]
command = "etabs-mcp"
tool_timeout_sec = 600
Factory Droid · Cursor · Claude Desktop · Windsurf · 任意 MCP 客户端
{
  "mcpServers": {
    "etabs": {
      "command": "etabs-mcp",
      "env": { "ETABS_MCP_CONNECT_MODE": "auto" }
    }
  }
}
HTTP(远程 Agent、多个客户端)
etabs-mcp --transport streamable-http --port 8765

然后直接提出要求:

“建立一个 2 层钢框架,2×1 跨,每跨 6 m × 5 m,柱采用 W14X90,梁采用 W18X35,楼板厚 200 mm。 施加 1.5 kPa SDL 和 3 kPa 活荷载,运行分析,报告 T₁、风致侧移和最不利钢构件 D/C 比,并展示 3D 视图。”

服务会自动连接:连接到正在运行的 ETABS,或启动一个实例。


71 个工具

领域工具
会话etabs_list_installations · etabs_connect · etabs_status · etabs_disconnect
模型与文件etabs_model_overview · etabs_new_model · etabs_open_model · etabs_save_model · etabs_set_units · etabs_get_stories · etabs_set_stories
几何etabs_add_frames · etabs_add_areas · etabs_add_points · etabs_list_objects · etabs_delete_objects · etabs_set_restraints · etabs_assign_section · etabs_select
属性etabs_list_properties · etabs_define_material · etabs_define_frame_section · etabs_define_area_section
荷载etabs_define_load_patterns · etabs_assign_loads · etabs_define_combinations · etabs_list_load_definitions
侧向体系etabs_define_seismic_load(ASCE 7-16 ELF)· etabs_define_wind_load(ASCE 7-16/7-22,其他规范可通过字段设置)· etabs_define_response_spectrum · etabs_set_mass_source · etabs_assign_diaphragm · etabs_set_modal_case
生成etabs_generate_building:一次调用即可生成网格、楼层、钢结构抗弯/支撑或混凝土框架/墙体体系、楼板、支座、楼板刚性隔板和重力荷载
分析与设计etabs_run_analysis · etabs_analysis_status · etabs_unlock_model · etabs_get_results · etabs_run_design · etabs_get_design_summary · etabs_design_codes
混凝土与墙体etabs_get_concrete_design(梁、柱、节点)· etabs_run_shear_wall_design · etabs_get_wall_design(墙肢、连梁)· etabs_get_slab_design(条带、冲切)
规范检查etabs_code_checks(层间位移、扭转/软弱层/重量不规则、振型质量、反应谱与 ELF 对比)· etabs_scale_response_spectrum
后台作业etabs_job_status · etabs_job_wait:使用 background=true 进行分析和设计,不会触发客户端超时
数据库表etabs_list_tables · etabs_get_table · etabs_edit_table
查看与查询etabs_render_view · etabs_find_objects · etabs_screenshot · etabs_show_window · etabs_refresh_view
跟踪与撤销etabs_what_changed · etabs_checkpoint · etabs_list_checkpoints · etabs_restore_checkpoint
导出与报告etabs_export_model(完整的 .e2k 文本,分页)· etabs_design_report(Markdown)· etabs_assign_label(组、墙肢、连梁)
菜单与对话框etabs_menu(浏览并运行 API 未提供的 ETABS 菜单命令)· etabs_dialogs
实例etabs_instances:同时操作多个 ETABS(etabs_connect(instance=...)),切换或移除实例
完整 APIetabs_search_api · etabs_describe_api · etabs_call_api · etabs_call_api_batch

此外还有 资源(etabs://api/interfaces、etabs://api/interface/{name}、etabs://api/enum/{name}、 etabs://server/info)以及一个 提示词(etabs_build_and_check),引导 Agent 完成整个工作流。

示例:精选工具未涵盖的任意操作
// 1. find it
etabs_search_api({ "query": "frame releases" })
// → SapModel.FrameObj.SetReleases(Name, ref II[], ref JJ[], ref StartValue[], ref EndValue[], ItemType)

// 2. call it: plain JSON, validated and converted to the exact .NET types
etabs_call_api({
  "path": "FrameObj.SetReleases",
  "args": { "Name": "13", "II": [false,false,false,false,false,true],
            "JJ": [false,false,false,false,false,true],
            "StartValue": [0,0,0,0,0,0], "EndValue": [0,0,0,0,0,0] }
})
// → { "ok": true, "ret": 0, "outputs": { ... } }

Agent 看到的内容

上方影片截取自一次录制的会话。Agent 通过 etabs-mcp 建立了一栋 6 层、4×3 跨的支撑钢结构建筑, 对其进行分析并运行 AISC 360-16 检查,发现 48 根梁超限,于是增大它们的截面,并反复重新运行所有步骤,直到没有构件超出承载力。

模型:354 根构件和 72 块楼板设计:48 根构件超限,最大 D/C 为 1.22迭代:0 根构件超限,最大 D/C 为 0.91
建模 · 354 根构件、72 块楼板、30 次工具调用设计 · 48 根构件超限,最大 D/C 为 1.22迭代 · W24X76 × 48 → 0 根构件超限,最大 D/C 为 0.91
etabs_render_view

Agent 根据模型数据绘制的专属视图。即使 ETABS 隐藏,它也能正常工作,不会占用焦点,并能显示 ETABS API 无法切换 GUI 显示的内容。

按设计比值着色的构件ASCE 7-16 地震荷载作用下的变形形状浅色主题,按截面着色
color_by="design_ratio"deformed_case="EQX", color_by="displacement"color_by="section", theme="light"
同一模型在真实 ETABS 窗口中的画面,由 etabs_screenshot 捕获

Agent 使用 etabs_screenshot 捕获的同一模型在 ETABS 中的画面。


工作原理

flowchart LR
    A["AI agent<br/>Claude Code · Codex · Droid · Cursor"] -- "MCP (stdio / HTTP)" --> S

    subgraph S["etabs-mcp"]
        direction TB
        T["71 curated tools<br/>+ generic dispatcher"] --> P["Policy<br/>read-only · confirm · blocked"]
        P --> C["Coercion<br/>JSON → typed args, ByRef placeholders"]
        C --> K["API catalog<br/>live reflection of ETABSv1.dll"]
        K --> W["Single STA worker thread"]
    end

    W -- "pythonnet / CoreCLR<br/>MethodInfo.Invoke" --> D["ETABSv1.dll<br/>(the installed version)"]
    D -- "COM, cross-process" --> E["ETABS.exe"]
    E -. "screen capture" .-> A

**对 API 进行逆向工程,而非对 ETABS 进行逆向工程。**此服务始终使用官方文档说明的 OAPI,不会修补或反编译 ETABS 引擎。其 API 范围根据随附的互操作程序集梳理而成:

  1. REA 对 ETABSv1.dll 进行静态元数据分析:365 个类型、3,275 个方法定义、14,752 个参数。
  2. 反射转储工具(tools/ApiDump)会将每个公共接口、签名、ByRef 标志、默认值和枚举写入 etabs_api_spec.json。
  3. **交叉核对:**反射结果与原始元数据完全一致(例如,cFrameObj + cAnalysisResults + cDatabaseTables = 136 个方法 + 1 个属性访问器 = REA 的 137 个)。
  4. 运行时,服务会重新反射已加载的 DLL,因此验证结果始终与所运行的 ETABS 相符。

让一切“开箱即用”的工程细节:

  • **类型化封送。**pythonnet 会将 Python int 在 object[] 中装箱为 PyInt,而反射无法将其用于 Int32。每个参数都会通过一个单元素类型化数组和 Array.Copy 进行传递,因此 ETABS 收到的是实际的 Int32/Double/枚举装箱对象和 ByRef 数组。
  • **单线程。**ETABS 和 COM 代理并非线程安全;所有调用都会在单个工作线程上串行执行。
  • 连接丢失(ETABS 已关闭或崩溃)会通过 HRESULT 检测到,并提示重新连接。
  • 处理 ETABS 的特殊情况:
    • 检测并还原 ETABS 静默重命名的库导入项(W14X90 → W14X90-1)。
    • 编辑表格后,ETABS 会将模型文件报告为临时文件 .$et;保存时会映射回 .EDB。
    • 无单位的结果列(漂移比、质量比)会转换为数值,而 Label: "1" 这样的 ID 会保留为字符串。
    • GPU 绘制的视口在 PrintWindow 中显示为空白,因此截图会从合成后的屏幕获取,之后焦点会交还给原窗口。

经真实 ETABS 测试

离线(CI): 58 项测试。每个精选工具都会通过 FastMCP 对接一个模拟后端运行,该后端会针对真实的 ETABSv1.dll 目录解析并校验每次调用的参数类型。方法名或参数名错误时,会像在 ETABS 中一样失败。

实时端到端测试: tests/live/test_live_e2e.py 会将服务作为真实的 MCP 子进程启动,运行 ETABS 23.3.2,并在约 42 秒内执行 42 次工具调用,0 次失败:

步骤验证结果
模型2 层、26 根框架构件(库中的 W 型钢)、4 块楼板、6 个固定支座
荷载SDL / LL / 风荷载模式、面荷载 + 线荷载 + 节点荷载、2 个组合 + AISC 默认值
分析所有工况均在 9.8 秒内完成;模型锁定
基底反力LL ΣFz = 360 kN = 3 kPa × 120 m²,完全一致;SDL 与楼板及线荷载的手算结果一致
模态 / 层间位移T₁ = 0.398 s · 最大风荷载层间位移角为 1/1846
设计26 个钢构件(AISC 360-16),最大 D/C 为 0.35,0 个不合格
通用 API设置并读回构件释放,执行 9 次调用的批处理,验证状态码失败、校验错误和确认错误
表格读取 26 个截面分配,通过交互式数据库编辑其中一项,并通过 API 验证
生命周期解锁、保存(.EDB)、截图、正常关闭 ETABS

实时 v0.2 测试套件: tests/live/test_live_v2.py 会在一个 3 层、63 个构件的模型中,针对 ETABS 驱动每个新增工具:

步骤验证结果
单位"3.5 m"、"4200 mm"、"500 mm" 输入均正确换算为对应数值
查找与标注Story2 上有 27 根柱、12 根梁;长度 ≥ 7.5 m 的梁有 18 根(已选中);组往返验证
侧向荷载ASCE 7-16 地震(X、X±E)、自动风荷载、ASCE 7-16 反应谱 + RS 工况、质量源、12 块楼板上的楼板隔板、9 个振型
变更跟踪手动编辑和新增梁均会报告;检查点可还原模型
后台作业分析立即返回;其他调用会收到 busy;job_wait 会返回结果
结果EQX、WX 和 RSX 基底剪力;仅 X 向地震时 FY 恰为零
可视化设计比、变形、截面和平面渲染;AISC 341 设计错误会被标记,绝不会显示为安全
导出与报告.e2k 截面信息、包含反力、振型、层间位移和设计结果的 Markdown 报告

实时 v0.3 测试套件: tests/live/test_live_v3.py:

步骤验证结果
生成器在非均匀网格(8/6/8 m)上生成 4 层混凝土剪力墙建筑;以 kip-ft 为单位生成钢支撑建筑
手算校核钢结构建筑 LL ΣFz = 0.05 ksf × 90 ft × 50 ft × 3 层,完全一致
规范校核层间位移(经 Cd 放大)、扭转、软弱层、重量、模态质量(12 个振型)、RS 与 ELF 对比
RS 缩放将反应谱缩放至 ELF 的 100%,重新分析,并验证比值为 1.00
混凝土与剪力墙按 ACI 318-19 设计梁、全部 48 根柱及节点;通过菜单设计剪力墙,并读回墙肢结果

演示运行(tools/record_demo_data.py):一个 6 层钢支撑建筑,包含 354 个构件和 72 块楼板。LL ΣFz = 9,720 kN(= 3 kPa × 30 m × 18 m × 6 层,完全一致),风荷载 ΣFx = 432 kN(= 18 kN × 24 个节点,完全一致),T₁ = 1.71 s。重新设计循环将最大 D/C 从 1.22 降至 0.91。

pip install -e ".[dev]"
pytest                                   # offline suite
ETABS_MCP_ARTIFACTS=docs/live pytest tests/live --live -s   # drives your local ETABS

配置

环境变量 / 标志默认值含义
ETABS_MCP_CONNECT_MODE / --connect-modeautoattach 表示连接到正在运行的 ETABS,start 表示启动一个新实例,auto 表示如果已有实例打开则连接,否则启动
ETABS_MCP_VERSION / --etabs-versionnewest要使用的 ETABS 主版本,例如 22
ETABS_MCP_INSTALL_DIR / --install-dirautoETABS 程序文件夹
ETABS_MCP_VISIBLE / --hiddenvisible启动时显示 ETABS 窗口
ETABS_MCP_READ_ONLY / --read-onlyoff拒绝所有会更改模型的调用
ETABS_MCP_ALLOW_DESTRUCTIVE / --allow-destructiveoff对破坏性调用跳过 confirm=true 检查(用于 CI / 无人值守场景)
ETABS_MCP_RUNTIMEcoreclrpythonnet 使用的 .NET 主机(netfx 作为后备选项)
ETABS_MCP_MAX_ARRAY_ITEMS2000限制 etabs_call_api 返回的数组长度
ETABS_MCP_MAX_TABLE_ROWS500表格和结果的默认分页大小
ETABS_MCP_AUDIT_LOG / --audit-logoff将每次模型更改调用(时间、实例、调用、参数、结果)追加到 JSON-lines 文件
ETABS_MCP_TOKEN / --tokennone--transport streamable-http/sse 的 Bearer 令牌;要在 localhost 之外监听时必须提供
发布(维护者)

标记 vX.Y.Z 会运行 release.yml,执行测试、构建 wheel、sdist 和 .mcpb 包,并发布 GitHub 版本。PyPI 和 MCP Registry 使用无需令牌的可信发布: 在 pypi.org 添加可信发布者(此仓库、工作流 release.yml、环境 pypi),然后设置 仓库变量 PUBLISH_PYPI=true。之后的标签会发布到 PyPI,并在 MCP Registry 中列出此服务。

版本支持
ETABS状态
23.x✅ 已通过实际运行验证(23.3.2)
22.x✅ 支持:使用相同的 .NET 8 API;目录会从你安装的 DLL 反射生成
24+✅ 预计可用:新方法会通过实时反射自动显示
≤ 21❌ 不支持(.NET Framework 时代的 API)
安全模型
级别示例行为
读取Get*、Count*、表格、结果始终允许
写入Set*、Add*、分析、设计只读模式下禁止
破坏性操作Delete*、新建 / 打开模型、解锁(删除结果)、关闭 ETABS需要 confirm=true
禁止InternalExec、插件钩子、活动对象切换永远不可调用

通过 etabs_menu 执行的菜单命令也需要 confirm=true,并且通过 HTTP 发送的每个请求都必须携带 Bearer 令牌。


项目结构

src/etabs_mcp/
  server.py        FastMCP assembly: tools, resources, prompt, agent instructions
  session.py       connection lifecycle + single worker thread + generic call()
  dotnet.py        pythonnet host, live reflection, typed marshalling, connection-loss detection
  catalog.py       API catalog: path resolution, search, describe
  coerce.py        JSON → signature-typed values, results → JSON
  policy.py        read / write / destructive / blocked classification
  discovery.py     ETABS installs and running instances
  screenshot.py    window capture
  render.py        offscreen model renderer (etabs_render_view)
  units.py         unit-aware lengths ("6 m", "20 ft", "250 mm")
  gui.py           ETABS menu commands through Windows UI Automation
  http.py          HTTP transports with bearer-token auth
  tools/           curated tools (connection, model, generator, geometry, properties, loads, lateral,
                   analysis, concrete, checks, tables, view, insight, api)
mcpb/              Claude Desktop extension manifest    server.json   MCP Registry entry
  data/etabs_api_spec.json   reflected API of ETABSv1.dll
tools/ApiDump                .NET reflection dumper that produced the API spec
tools/record_demo_data.py    drives the MCP tools against live ETABS and records the showcase data
tools/render_hero.py         renders the README film and stills from that data
tools/build_mcpb.py          builds the Claude Desktop extensions
tests/             offline suite + live end-to-end test

故障排除

  • install_not_found:运行 etabs-mcp --list-installs;如果 ETABS 安装在特殊位置,请设置 ETABS_MCP_INSTALL_DIR。
  • 连接后没有任何反应:等待 ETABS 完成启动并关闭所有模态对话框;或者向 etabs_connect 传入 pid。
  • 分析后无法编辑:模型已锁定。etabs_unlock_model(confirm=true) 会删除结果并解锁模型。
  • 长时间分析在客户端超时:提高客户端的 MCP 工具超时时间(参见连接你的 Agent)。
  • 切换 ETABS 主版本:重启服务;一个进程只托管一个 ETABSv1.dll。

Apache-2.0 © Moha2005269 · ETABS 是 Computers and Structures, Inc. 的商标。本项目独立运营,与 CSI 无关联,也未获得 CSI 的认可。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。