ETABS MCP Server
Enables users to control CSI ETABS structural engineering software through Claude, allowing model creation, status checks, and engineering checks via COM automation.
README
How to Initialize the ETABS MCP Server
This documents how to set up and launch the ETABS MCP server so Claude Desktop can drive CSI ETABS on this machine.
1. Layout
| Path | Purpose |
|---|---|
D:\MCP_etabs\etabs-mcp\server.py |
FastMCP server entry point (stdio transport) |
D:\MCP_etabs\etabs-mcp\etabs_client.py |
COM wrapper around ETABS (CSI.ETABS.API.ETABSObject) |
D:\MCP_etabs\etabs-mcp\engineering_checks.py |
Check registry (currently stubs — see Limitations) |
D:\MCP_etabs\etabs-mcp\requirements.txt |
Python dependencies for this server |
D:\MCP_etabs\mcp_etabs\ |
Windows venv that runs the server |
2. Prerequisites
- CSI ETABS 23 installed at
C:\Program Files\Computers and Structures\ETABS 23(confirmed present). - The venv at
D:\MCP_etabs\mcp_etabsalready has all required packages installed and importable:mcp,pywin32(win32com.client),comtypes,pydantic,python-dotenv.
If you ever need to rebuild the venv from scratch:
cd D:\MCP_etabs
python -m venv mcp_etabs
.\mcp_etabs\Scripts\python.exe -m pip install -r etabs-mcp\requirements.txt
.\mcp_etabs\Scripts\pywin32_postinstall.exe -install
The pywin32_postinstall step registers the COM support pywin32 needs — skip it and win32com.client.GetActiveObject/Dispatch calls can fail even though pywin32 is installed.
3. Claude Desktop configuration
Your MCP server is registered in:
C:\Users\cleis\AppData\Roaming\Claude-3p\claude_desktop_config.json
{
"mcpServers": {
"etabs": {
"command": "D:\\MCP_etabs\\mcp_etabs\\Scripts\\python.exe",
"args": ["D:\\MCP_etabs\\etabs-mcp\\server.py"],
"env": {
"ETABS_INSTALL_DIR": "C:\\Program Files\\Computers and Structures\\ETABS 23"
}
}
}
}
Heads up: this machine has two separate Claude Desktop config files:
Claude\claude_desktop_config.json— does not contain theetabsentry.Claude-3p\claude_desktop_config.json— contains theetabsentry above.
If the ETABS tools don't show up in a Claude Desktop session, confirm which config that install of Claude Desktop actually reads, and copy the etabs block into it if needed.
After editing either config file, fully quit and relaunch Claude Desktop (a reload isn't enough — MCP servers are spawned at app startup).
4. Running the server directly (manual / standalone)
You don't need Claude Desktop to start the server — it's a normal Python process that speaks MCP over stdio. Useful for checking it boots cleanly before wiring it into Claude Desktop.
cd D:\MCP_etabs\etabs-mcp
$env:ETABS_INSTALL_DIR = "C:\Program Files\Computers and Structures\ETABS 23"
..\mcp_etabs\Scripts\python.exe server.py
-
server.pycallsmcp.run(transport="stdio"), so it blocks and waits for MCP protocol messages on stdin — running it plain like this and seeing it just hang with no errors is expected, not a bug. There's no HTTP port to open or curl. -
ETABS_INSTALL_DIRmust be set in the environment before launch (Claude Desktop sets it via theenvblock in the config; running by hand you set it yourself as above, or via a.envfile sincepython-dotenvis a dependency). -
To actually exercise the tools without Claude Desktop, use the MCP Inspector.
Do not use
mcp dev server.pyfor this project. It doesn't run your script in themcp_etabsvenv — it shells out touv run --with mcp mcp run server.py, which spins up a throwawayuv-managed environment containing only the basemcppackage. Inside that ephemeral env,mcp runis itself a Typer CLI command needing thecliextra, which--with mcpnever installs, so it crashes immediately withError: typer is required. Install with 'pip install mcp[cli]'. That plain-text error corrupts the JSON-RPC stream the Inspector expects, which shows up in the browser asError from MCP server: SyntaxError: Unexpected token 'E', "Error: typ"... is not valid JSON, or more generally asError Connecting to MCP Inspector Proxy - Check Console logs. Even patching that, the ephemeral env still wouldn't havepywin32/comtypes, so ETABS COM calls would fail anyway —mcp dev's auto environment is simply the wrong tool here.Instead, launch the Inspector directly against the venv's Python, bypassing
uvandmcp runentirely:cd D:\MCP_etabs\etabs-mcp $env:ETABS_INSTALL_DIR = "C:\Program Files\Computers and Structures\ETABS 23" npx @modelcontextprotocol/inspector "D:\MCP_etabs\mcp_etabs\Scripts\python.exe" server.pyThis runs
server.pyin-process with the real venv (all ofpywin32,comtypes,pydantic,python-dotenvavailable), with nomcp run/typer step involved. Open the exact URL the terminal prints (see below) to reach the Inspector UI, then callping,etabs_status, etc. interactively."Connection Error - Check if your MCP server is running and proxy token is correct": the terminal prints a session token and a full URL with it baked in, e.g.:
🔑 Session token: d11cea13ad39cdadf6b0254de1b3a95e50c9a2ab0e7ba0bd61cecec76cf93623 🚀 MCP Inspector is up and running at: http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=d11cea13ad39cdadf6b0254de1b3a95e50c9a2ab0e7ba0bd61cecec76cf93623You must open that exact URL (token included). If the auto-opened browser tab landed on plain
http://localhost:6274with no?MCP_PROXY_AUTH_TOKEN=..., or you refreshed/reopened the tab after a restart (the token changes every run), the proxy rejects it with this error. Copy the full URL from the terminal each time, or set$env:DANGEROUSLY_OMIT_AUTH = "true"before launching to disable the token check for local-only debugging.Also note: only one Inspector instance can bind port 6277 (proxy) / 6274 (UI) at a time —
❌ Proxy Server PORT IS IN USE at port 6277 ❌means a previous instance is still running. On Windows,Ctrl+Cin the terminal doesn't always kill the underlyingnodeprocess cleanly; if the port stays busy, find and force-kill it:Get-NetTCPConnection -LocalPort 6277,6274 -ErrorAction SilentlyContinue | Select-Object LocalPort,OwningProcess Stop-Process -Id <OwningProcess> -Force -
Stop the process with
Ctrl+C.
5. Recommended: start ETABS first
etabs_client.py will auto-start ETABS via COM (Dispatch + ApplicationStart) if it isn't already running, but attaching to an already-running ETABS instance is more reliable:
- Open ETABS 23 manually.
- Open or create the model you want Claude to work with.
- Launch/restart Claude Desktop so it spawns the MCP server.
6. Verifying the connection
Once Claude Desktop is running with the server registered, ask Claude to call:
ping→ should return"ETABS MCP server is running."(confirms the process launched correctly, independent of ETABS).etabs_status→ returns a dict withconnected,mode,install_dir,prog_id, anderrorif applicable.connected: "true"means it attached to a live ETABS COM object.available_checks→ lists the check names currently registered (story_drift,base_shear,modal_participation).
7. Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
etabs tools missing in Claude |
Wrong config file, or Claude Desktop not restarted | Confirm which claude_desktop_config.json this install reads; fully restart the app |
pywin32 is required to connect to ETABS... |
pywin32 not installed/registered in the venv | Reinstall requirements and run pywin32_postinstall.exe -install |
etabs_status returns connected: false, mode: unavailable |
ETABS not running and nothing to attach to | Open ETABS manually, or let the client auto-start it (allow_start=True is the default for most calls) |
Unable to connect to ETABS COM server |
COM registration issue or ETABS API not licensed/installed correctly | Verify ETABS installed correctly and its COM interop is registered (reinstalling ETABS re-registers it) |
execute_check returns status: "blocked" |
Same as above — check requires a live ETABS connection | Same fix as connected: false above |
8. Current limitations (scaffold state)
engineering_checks.pyonly confirms ETABS connectivity per check — it does not yet pull real drift, base shear, or modal mass results fromSapModel.execute_checkreturnsstatus: "ready"as a placeholder, not actual results.create_simple_modelcreates a blank model viaSapModel.File.NewBlank()and can optionally save it, but has no further modeling capability yet (no grids, stories, sections, loads).- There is no explicit
Disconnect/ApplicationExittool — the server currently only attaches or starts ETABS, it never closes it.
推荐服务器
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 模型以安全和受控的方式获取实时的网络信息。