
ETABS MCP
io.github.Moha2005269Published by GitHub account Moha2005269v0.3.2Updated Nov 1, 2026
Agentic MCP server for CSI ETABS v22+: model, load, analyse, design and inspect structures.
Overview
Drives CSI ETABS v22+ from an AI assistant: build, load, analyse, design and inspect structural models through the official ETABS API.
- What you can do
- Manage the ETABS session: list installations, connect, check status, disconnect, and drive several instances.
- Build and edit models: stories, grids, frames, areas, points, sections, materials, restraints, and generate whole buildings in one call.
- Define loads and lateral systems: load patterns, combinations, ASCE 7 seismic and wind, response spectra, mass source, diaphragms.
- Run analysis and design, then read results, D/C ratios, concrete and wall design, and code checks such as drift and irregularities.
- Read and edit Interactive Database tables, render or screenshot views, export .e2k models and Markdown design reports.
- Search, describe and call any of the roughly 1,300 ETABS API methods…
- When to use it
- Useful when an assistant should work inside a licensed ETABS installation on Windows: generating and iterating on building models, running analyses and code checks, or automating repetitive ETABS workflows that would otherwise be done by hand in the GUI.
- Requirements
- Windows desktop with a licensed ETABS 22 or newer installed, Python 3.10+ and the .NET 8 Desktop Runtime (shipped with ETABS 22+); installed from PyPI or run with uvx. Optional environment variables such as ETABS_MCP_CONNECT_MODE, ETABS_MCP_READ_ONLY and ETABS_MCP_TOKEN configure connection, safety and HTTP auth. Long analyses may need a raised client tool timeout.
Installation
In SourceWeft
- Open ETABS MCP in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
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.
Source: README.md at commit 288df2b
Tools
0Version history
1- v0.3.2LatestOct 18, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts