Professional-grade MCP server for ETABS structural analysis integration with Claude Desktop
The ETABS FastMCP Server provides seamless integration between Claude Desktop and ETABS (Extended Three-Dimensional Analysis of Building Systems) structural analysis software. This professional-grade solution uses a hybrid Python+C# architecture optimized for scalability, reliability, and ease of use.
βββββββββββββββββββ JSON/stdio βββββββββββββββββββββ COM API βββββββββββββββ
β Claude AI β ββββββββββββββΊ β Python FastMCP β ββββββββββββΊ β C# Connector β ββββββββΊ β ETABS β
β Desktop β β Server β β β β Software β
βββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββ βββββββββββββββ
Key Components:
- Python FastMCP Server: High-level MCP interface with @mcp.tool() decorators
- C# ETABS Connector: Robust COM interface manager for ETABS API
- JSON Communication: Efficient stdio-based messaging between components
- ETABS Software: ETABS v18+ installed and licensed
- Python 3.8+: With pip package manager
- Visual Studio 2019+: Or MSBuild tools for C# compilation
- Claude Desktop: Latest version
-
Clone the repository:
git clone <repository-url> cd ETABSFastMCP
-
Install Python dependencies:
cd python-server pip install -r requirements.txt -
Build the C# connector:
cd ../csharp-connector msbuild ETABSConnector.csproj /p:Configuration=Release -
Configure Claude Desktop:
- Copy
config/claude_desktop_config.jsoncontent to your Claude Desktop config - Update paths to match your installation directory
- Copy
-
Start ETABS (optional - server can auto-start)
-
Test the connection:
# In Claude Desktop, try: "Connect to ETABS and create a new blank model"
-
Create your first structural elements:
# Example commands for Claude: "Create a point at coordinates (0, 0, 0) with UZ restraint" "Create a frame from (0, 0, 0) to (10, 0, 0) with W14X90 section"
connect_to_etabs()- Connect to ETABS applicationcreate_blank_model()- Create new blank modelget_connection_status()- Check connection statusdisconnect_from_etabs()- Disconnect from ETABS
create_point(x, y, z, name?, restraints?)- Create structural pointget_point(name)- Get point informationlist_points()- List all points in modelmodify_point(name, x?, y?, z?, restraints?)- Modify point propertiesdelete_point(name)- Delete point from model
create_frame(start_x, start_y, start_z, end_x, end_y, end_z, name?, section?, material?)- Create frame elementget_frame(name)- Get frame informationlist_frames()- List all frames in modelmodify_frame(name, section?, material?)- Modify frame propertiesdelete_frame(name)- Delete frame from model
save_model(file_path?)- Save current modelhealth_check()- Check system health
# Through Claude Desktop conversation:
"Connect to ETABS and create a new blank model"
"Create the following points:
- Point A at (0, 0, 0) with UX, UY, UZ restraints
- Point B at (10, 0, 0) with UZ restraint
- Point C at (10, 10, 0) with UZ restraint
- Point D at (0, 10, 0) with UZ restraint"
"Create frames connecting these points to form a rectangular frame:
- Frame AB from point A to B using W14X90 section
- Frame BC from point B to C using W14X90 section
- Frame CD from point C to D using W14X90 section
- Frame DA from point D to A using W14X90 section"
"List all frames in the model and show their properties""Create a 3D building frame:
1. Create a 4x4 grid of points at elevation 0, spacing 8m
2. Create another identical grid at elevation 4m
3. Connect corresponding points with vertical columns using W14X74 sections
4. Connect points at each level with beams using W21X50 sections
5. Apply pinned restraints to all base points"The system is designed for easy extension. To add new ETABS functionality:
-
Add to C# Connector:
// In CommandProcessor.cs, add new case: "your_new_command" => ProcessYourNewCommand(command.Parameters), // Implement the method: private CommandResponse ProcessYourNewCommand(Dictionary<string, object> parameters) { // Your ETABS API calls here return new CommandResponse { Success = true, Data = result }; }
-
Add to Python Server:
@mcp.tool() async def your_new_function(param1: str, param2: float) -> Dict[str, Any]: """ Description of your new function """ try: response = await connector.send_command("your_new_command", { "param1": param1, "param2": param2 }) return response except Exception as e: return {"success": False, "error": str(e)}
Analysis Operations:
- Run analysis
- Get analysis results
- Extract forces and moments
Loading Operations:
- Create load patterns
- Apply loads to elements
- Load combinations
Design Operations:
- Run steel design
- Get design results
- Optimize sections
- Comprehensive exception handling throughout
- Automatic process recovery on crashes
- Detailed error logging and reporting
- Efficient JSON serialization
- Minimal memory footprint
- Optimized COM object management
- Modular architecture for easy extension
- Clean separation of concerns
- Professional code organization
- Comprehensive logging
- Health monitoring
- Graceful shutdown handling
- Resource cleanup
Connection Errors:
Error: "Failed to start ETABS connector"
- Ensure ETABS is installed and licensed
- Check that ETABSv1.dll is accessible
- Verify .NET Framework 4.8 is installed
Permission Issues:
Error: "Access denied to ETABS API"
- Run as Administrator if needed
- Check ETABS licensing status
- Verify COM object registration
Communication Errors:
Error: "No response from ETABS connector"
- Check C# connector build successful
- Verify Python can execute connector
- Check process permissions
Enable detailed logging by setting environment variable:
set ETABS_MCP_DEBUG=1Point3D:
{
"x": 0.0,
"y": 0.0,
"z": 0.0
}Restraints:
{
"UX": true, // Translation X
"UY": false, // Translation Y
"UZ": true, // Translation Z
"RX": false, // Rotation X
"RY": false, // Rotation Y
"RZ": false // Rotation Z
}Frame Properties:
{
"name": "F1",
"startPoint": {"x": 0, "y": 0, "z": 0},
"endPoint": {"x": 10, "y": 0, "z": 0},
"section": "W14X90",
"material": "A992",
"length": 10.0
}- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- CSI (Computers & Structures, Inc.) for ETABS software
- Anthropic for Claude and MCP protocol
- FastMCP library contributors
Built with β€οΈ for the structural engineering community
This is a professional-grade, production-ready solution designed for real-world structural engineering workflows.