OpenSTAAD MCP Server

io.github.BentleySystemsPublished by GitHub account BentleySystemsv1.3.0Updated Oct 24, 2026

MCP server for Bentley STAAD.Pro via the OpenSTAAD API

VerifiedSTDIODesktop onlyDeveloper ToolsData & Analytics

Overview

AI-generated overview

Local MCP server that lets an AI assistant read and modify Bentley STAAD.Pro structural models through the OpenSTAAD API.

What you can do
  • Discover and read API skills and usage guidance for the STAAD.Pro OpenSTAAD API
  • List running STAAD.Pro instances with model paths and versions, and check connection, version and analysis status
  • Run validated Python code against a connected STAAD.Pro model to define load cases, set properties and extract data
  • Read CSV or XLSX input files into the sandbox and write results back to CSV or multi-sheet XLSX files
When to use it
Useful for structural engineers who want an assistant to automate repetitive STAAD.Pro work such as load case definition, property setting and bulk data extraction, including across several open models at once.
Requirements
Windows 11 or newer with STAAD.Pro 2025 or newer installed and running with a model open. Installed as an .mcpb bundle in Claude Desktop, or run locally with uv/uvx in stdio mode; HTTP mode listens on port 18120 by default and needs an Authorization Bearer token. No cloud account or API key.
Before you install
The execute_code tool runs Python against your live model, so changes to load cases, properties and model data can be written; code is AST-checked and imports, file access and dangerous builtins are blocked, but review actions before approving. File I/O is limited to configured allowed directories, with a 50 MB, 100K-row and 500-column cap, and overwriting existing output files is off by default. In HTTP mode, protect the bearer token and keep the endpoint local.

Installation

In SourceWeft

  1. Open OpenSTAAD MCP Server in the dashboard and add it to a workspace.
  2. 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

OpenSTAAD MCP Server

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.

Key Features

  • 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.

Prerequisites

  • OS: Windows 11 or newer
  • STAAD.Pro 2025 or newer installed and running

Quick Start with Claude Desktop (<2min)

  1. Download the latest openstaad-mcp.mcpb file from the GitHub Releases page.
  2. Open Claude Desktop.
  3. Click the ☰ menu (top-left) → File → Settings → Extensions.
  4. Click Advanced → Install Extensions.
  5. Select the downloaded .mcpb file.
  6. Click the ☰ menu (top-left) → File → Exit
  7. 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.


Other Clients & Configuration

TL;DR:

If not already installed, install uv with the command:

powershell
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:

powershell
uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp

VS Code with GitHub Copilot

  • For stdio: Open the Command Palette → MCP: Add Server... → Command (stdio) and enter the following command:

    powershell
    uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp
  • For http: First, start the server in a terminal:

    powershell
    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: abc123def456ghi789jkl012mno345pqINFO:  Starting MCP server 'OpenSTAAD MCP' with transport 'http' (stateless) on http://127.0.0.1:18120/mcp

    Then, 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). 18120 is the default port, but yours may differ if you have multiple instances running or if you changed the default. Add the header Authorization: Bearer <token> with the token shown in the MCP server terminal.

GitHub Copilot CLI

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:

    powershell
    uvx --from git+https://github.com/BentleySystems/openstaad-mcp openstaad-mcp
  • For HTTP transport, first start the server in a terminal:

    powershell
    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: abc123def456ghi789jkl012mno345pqINFO:  Starting MCP server 'OpenSTAAD MCP' with transport 'http' (stateless) on http://127.0.0.1:18120/mcp

    Then add the server in Copilot CLI using the URL shown in the terminal (e.g. http://127.0.0.1:18120/mcp). 18120 is the default port, but yours may differ if you have multiple instances running or if you changed the default. Add the header Authorization: Bearer <token> with the token shown in the MCP server terminal.

Claude Desktop (manual configuration)

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
jsonc
{  "mcpServers": {    "openstaad": {      "command": "uvx",      "args": ["--from", "git+https://github.com/BentleySystems/openstaad-mcp", "openstaad-mcp"]    }  }}

Claude Code (CLI)

  • For stdio transport, use the command:

    powershell
    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:

    powershell
    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: abc123def456ghi789jkl012mno345pqINFO:  Starting MCP server 'OpenSTAAD MCP' with transport 'http' (stateless) on http://127.0.0.1:18120/mcp

    Then add the server in Claude Code with the command:

    powershell
    claude mcp add --transport http openstaad http://127.0.0.1:18120/mcp --header "Authorization: Bearer <your-token>"

    18120 is the default port, but yours may differ if you have multiple instances running or if you changed the default.

Gemini CLI

  • For stdio transport, use the command:

    powershell
    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:

    powershell
    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: abc123def456ghi789jkl012mno345pqINFO:  Starting MCP server 'OpenSTAAD MCP' with transport 'http' (stateless) on http://127.0.0.1:18120/mcp

    Then add the server in Gemini CLI with the command:

    powershell
    gemini mcp add --transport http --header "Authorization: Bearer <your-token>" openstaad http://127.0.0.1:18120/mcp

    18120 is the default port, but yours may differ if you have multiple instances running or if you changed the default.

Transport Modes

The server supports two transport modes:

ModeWhen to use
stdio (default)The MCP client launches the server process directly. Used by Claude Desktop, Claude Code, VS Code Copilot (stdio config).
HTTPThe server runs persistently and clients connect over the network.

CLI Options

FlagDefaultDescription
--transport {stdio,http}stdioTransport mode
--log-level LEVELINFODEBUG, INFO, WARNING, or ERROR
--log-file PATHOS defaultPath to log file
--port PORT18120[http] TCP port to listen on
--token TOKEN-[http] Bearer token for authentication

Available MCP Tools

ToolDescription
discover_apiLists available API skills and usage guidance
read_skillsReturns detailed guidance for requested skills
list_instancesLists active STAAD.Pro instances with model paths and versions
execute_codeRuns validated Python code against the connected STAAD.Pro model
get_statusReturns connection state, STAAD version, model path, analysis status

File I/O

The execute_code tool supports optional server-side file I/O for bulk data workflows. Instead of passing large datasets through the agent's context window, the server reads/writes CSV and XLSX files directly and injects the data into the sandbox as the input_data variable.

ParameterDescription
input_data_pathPath to a .csv or .xlsx file. The server reads and parses it, then injects as the input_data variable in the sandbox.
output_data_pathPath where the sandbox return value will be written. The return value must be a list-of-lists (CSV) or a {sheet_name: {columns, rows}} dict (multi-sheet XLSX).
overwriteAllow overwriting an existing output file (default false).

input_data has a stable, extension-specific shape:

  • CSV: a list of row lists. If a header is detected, it is input_data[0] and data rows start at input_data[1:].
  • XLSX: a dict: {sheet_name: {"columns": list, "rows": list_of_rows}}.

Path containment: File paths must resolve inside a configured allowed boundary before any read/write occurs. The server supports both client-configured MCP roots and server-configured allowed directories (via --allowed-dirs or user_config.allowed_directories in the manifest). The server validates paths against these boundaries before any file access.

Limits: Max file size 50 MB, max 100K rows, max 500 columns, max 50 input sheets.

Security Notes

  • Bearer token authentication. Pass --token MY_SECRET_TOKEN when running in HTTP mode and include Authorization: Bearer <token> in client requests.
  • DNS rebinding protection. Starlette Middlewares validate Host, Sec-Fetch-Site and Origin headers.
  • Code sandbox. The execute_code tool validates all Python code via AST analysis before execution. Imports, file access, and dangerous builtins are blocked.

Privacy Policy

Please find the Bentley Systems privacy policy here.

Contributing

See CONTRIBUTING.md for guidelines on setting up your development environment, branch naming, running tests, and submitting pull requests.

Source: README.md at commit 9910fef

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

2
  1. v1.3.0LatestOct 1, 2026
  2. v1.2.0Sep 16, 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