A Model Context Protocol (MCP) server for Bentley STAAD.Pro that enables AI agents like Claude Desktop, Gemini, or VSCode Copilot to interact with your STAAD.Pro models and perform various time-consuming tasks like load cases definition, data extraction, repetitive property setting and more.
This MCP server was introduced as part of Bentley's Infrastructure AI Co-Innovation Initiative to help our users and accounts discover opportunities and innovate faster, while connecting Bentley's unique engineering tool capabilities to their emerging agentic workflows.
- Fast and flexible: Enjoy minimal latency, interact with every STAAD.Pro features covered by the OpenSTAAD API.
- AI-friendly: Provides documentation, guidance and feedback via dedicated tools to help your AI agent ramp up quickly on the STAAD.Pro API.
- Multi-instance support: Connects to multiple running STAAD.Pro instances simultaneously to parallelize tasks across models.
- Privacy-first: All processing happens locally on your machine. No data is sent to the cloud. No telemetry.
- OS: Windows 11 or newer
- STAAD.Pro 2025 or newer installed and running
- Download the latest
openstaad-mcp.mcpbfile from the GitHub Releases page. - Open Claude Desktop.
- Click the ☰ menu (top-left) → File → Settings → Extensions.
- Click Advanced → Install Extensions.
- Select the downloaded
.mcpbfile. - Click the ☰ menu (top-left) → File → Exit
- Restart Claude Desktop.
Claude Desktop will install the server automatically. Open a new conversation and ask Claude to interact with your STAAD.Pro model.
Tip: Make sure STAAD.Pro is running with a model open before you start chatting.
TL;DR:
If not already installed, install uv with the command:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Configure your client to start the server in stdio mode with the command:
uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp-
For stdio: Open the Command Palette → MCP: Add Server... → Command (stdio) and enter the following command:
uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp
-
For http: First, start the server in a terminal:
uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp --transport http
Look for the generated token and URL in the terminal output. It should look like this:
WARNING: No --token provided. Auto-generated token: abc123def456ghi789jkl012mno345pq INFO: Starting MCP server 'OpenSTAAD MCP' with transport 'http' (stateless) on http://127.0.0.1:18120/mcpThen, in VS Code, open the Command Palette → MCP: Add Server... → HTTP URL and enter the URL shown in the terminal (e.g.
http://127.0.0.1:18120/mcp).18120is the default port, but yours may differ if you have multiple instances running or if you changed the default. Add the headerAuthorization: Bearer <token>with the token shown in the MCP server terminal.
Use the /mcp add command inside a Copilot CLI session to add the server. See the Copilot CLI documentation for more details.
-
For stdio transport, use the command:
uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp
-
For HTTP transport, first start the server in a terminal:
uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp --transport http
Look for the generated token and URL in the terminal output. It should look like this:
WARNING: No --token provided. Auto-generated token: abc123def456ghi789jkl012mno345pq INFO: Starting MCP server 'OpenSTAAD MCP' with transport 'http' (stateless) on http://127.0.0.1:18120/mcpThen add the server in Copilot CLI using the URL shown in the terminal (e.g.
http://127.0.0.1:18120/mcp).18120is the default port, but yours may differ if you have multiple instances running or if you changed the default. Add the headerAuthorization: Bearer <token>with the token shown in the MCP server terminal.
If you prefer manual setup over the .mcpb bundle, edit the Claude Desktop
config file directly:
- Windows (MSIX):
%LOCALAPPDATA%\Packages\Claude_<id>\LocalCache\Roaming\Claude\claude_desktop_config.json - Windows (classic):
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
-
For stdio transport, use the command:
claude mcp add --transport stdio openstaad -- uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp
-
For HTTP transport, first start the server in a terminal:
uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp --transport http
Look for the generated token and URL in the terminal output. It should look like this:
WARNING: No --token provided. Auto-generated token: abc123def456ghi789jkl012mno345pq INFO: Starting MCP server 'OpenSTAAD MCP' with transport 'http' (stateless) on http://127.0.0.1:18120/mcpThen add the server in Claude Code with the command:
claude mcp add --transport http openstaad http://127.0.0.1:18120/mcp --header "Authorization: Bearer <your-token>"
18120is the default port, but yours may differ if you have multiple instances running or if you changed the default.
-
For stdio transport, use the command:
gemini mcp add openstaad uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp
-
For HTTP transport, first start the server in a terminal:
uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp --transport http
Look for the generated token and URL in the terminal output. It should look like this:
WARNING: No --token provided. Auto-generated token: abc123def456ghi789jkl012mno345pq INFO: Starting MCP server 'OpenSTAAD MCP' with transport 'http' (stateless) on http://127.0.0.1:18120/mcpThen add the server in Gemini CLI with the command:
gemini mcp add --transport http --header "Authorization: Bearer <your-token>" openstaad http://127.0.0.1:18120/mcp
18120is the default port, but yours may differ if you have multiple instances running or if you changed the default.
The server supports two transport modes:
| Mode | When to use |
|---|---|
| stdio (default) | The MCP client launches the server process directly. Used by Claude Desktop, Claude Code, VS Code Copilot (stdio config). |
| HTTP | The server runs persistently and clients connect over the network. |
| Flag | Default | Description |
|---|---|---|
--transport {stdio,http} |
stdio |
Transport mode |
--log-level LEVEL |
INFO |
DEBUG, INFO, WARNING, or ERROR |
--log-file PATH |
OS default | Path to log file |
--port PORT |
18120 |
[http] TCP port to listen on |
--token TOKEN |
- | [http] Bearer token for authentication |
| Tool | Description |
|---|---|
discover_api |
Lists available API skills and usage guidance |
read_skills |
Returns detailed guidance for requested skills |
list_instances |
Lists active STAAD.Pro instances with model paths and versions |
execute_code |
Runs validated Python code against the connected STAAD.Pro model |
get_status |
Returns connection state, STAAD version, model path, analysis status |
- Bearer token authentication. Pass
--token MY_SECRET_TOKENwhen running in HTTP mode and includeAuthorization: Bearer <token>in client requests. - DNS rebinding protection. Starlette Middlewares validate
Host,Sec-Fetch-SiteandOriginheaders. - Code sandbox. The
execute_codetool validates all Python code via AST analysis before execution. Imports, file access, and dangerous builtins are blocked.
Please find the Bentley Systems privacy policy here.
git clone https://github.com/BentleySystems/openstaad-mcp.git
cd openstaad-mcppython -m venv .venv
# Windows (PowerShell)
.\.venv\Scripts\Activate.ps1
# Windows (cmd)
.venv\Scripts\activate.batpip install -e ".[dev]"# stdio mode (default)
openstaad-mcp
# HTTP mode
openstaad-mcp --transport http# All unit tests (no STAAD.Pro needed)
pytest
# Specific test files
pytest tests/test_skills.py tests/test_connection.py -v
# Integration tests (requires a running STAAD.Pro instance on Windows)
pytest -m integration -vruff check .
ruff format --check .- To produce the standalone
.exefiles distributed via the installer:
pip install -e ".[build]"
pyinstaller mcpb/openstaad-mcp.spec --noconfirmThis creates one file in the dist/ directory:
openstaad-mcp.exe: console executable (stdio & http transport)
- To create the
.mcpbinstaller bundle, run:
npm install -g @anthropic-ai/mcpb
New-Item -ItemType Directory -Path mcpb-staging -Force
Copy-Item dist/openstaad-mcp.exe mcpb-staging/
Copy-Item mcpb/manifest.json mcpb-staging/
mcpb pack mcpb-staging/ openstaad-mcp.mcpbThe output MCPB bundle is written to .\openstaad-mcp.mcpb.
See CONTRIBUTING.md for guidelines on setting up your development environment, branch naming, running tests, and submitting pull requests.
{ "mcpServers": { "openstaad": { "command": "uvx", "args": ["--from", "git+https://github.com/BentleySystems/openstaad-mcp", "openstaad-mcp"] } } }