dlubal-mcp
Model Context Protocol (MCP) server that enables AI tools and large language models (LLMs) to interact with running Dlubal structural analysis applications.
Built on top of the dlubal.api gRPC client library, dlubal-mcp exposes tools that AI assistants can call directly to do modelling, analysis or reading results through the API scripts.
Supported Applications
| Application | Script Tool |
|---|---|
| RFEM 6 — Finite Element Analysis | run_rfem_script |
| RSTAB 9 — Frame and Truss Analysis | run_rstab_script |
| RSECTION 1 — Cross-Section Analysis | run_rsection_script |
How It Works
Choosing a transport
dlubal-mcp speaks two MCP transports. Pick by how the client reaches it.
stdio |
streamable-http (default) |
|
|---|---|---|
| How it starts | your client launches it as a subprocess | you start it; it listens on a port |
| Who can reach it | only the client that launched it | anything on the machine |
| Access token | not needed | required (DLUBAL_MCP_ALLOWED_API_KEYS) |
| Script tools | enabled by default | withheld unless the operator enables them |
| Typical user | an engineer in VS Code, Claude Code, Cursor | Dlubal CALC via the Connector; multi-client setups |
Use stdio unless something prevents it. It is what the MCP specification asks clients to prefer, and it needs no port and no token: the client owns the process, so there is no anonymous caller to authenticate. Browsers cannot launch a subprocess, which is why Dlubal CALC uses the HTTP door instead.
{
"mcpServers": {
"dlubal-mcp": {
"command": "C:\\Program Files\\Dlubal\\RFEM 6.15\\bin\\python.exe",
"args": ["-m", "dlubal_mcp", "--transport", "stdio"]
}
}
}
Running the Dlubal-bundled python.exe lets the server find the API key the
Dlubal application already wrote, so no key configuration is needed. Set
DLUBAL_MCP_ALLOW_SCRIPTS=false to withhold the script tools on stdio as well.
Running a stdio server next to the Connector. Both use the same execution
journal in %LOCALAPPDATA%\DlubalMCP, so while one of them runs a script or a
model operation, the other refuses new ones with busy. RFEM also accepts only
one API client at a time, so read tools on the second server report RFEM as
unavailable until the first finishes. Either retry, or keep one server in use.
The exclusion holds only while both use the default journal: do not point
RFEM_EXECUTION_STATE_FILE (or the RSTAB/RSECTION equivalents) at a different
file on a machine that runs both.
HTTP access protection
Starting with 1.0.13, HTTP access always requires a separate bearer token and a
numeric loopback bind address. The matching Dlubal Connector provisions this
automatically. Standalone clients must configure DLUBAL_MCP_ALLOWED_API_KEYS
and send Authorization: Bearer <access-token>; the Dlubal application API key
is a separate credential. Anonymous operation and query-string tokens are not
supported. See HTTP authentication and upgrade notes.
dlubal-mcp acts as a bridge between an AI assistant and a running Dlubal application. The application must already be open and its API service active — the MCP server connects to the live session, it does not launch applications itself.
- Start RFEM 6, RSTAB 9, or RSECTION 1 on your machine
- Launch the MCP server with proper settings (urls, API ports)
- An AI tool calls e.g.
run_rfem_scriptwith Python code - The code executes against the live application and returns the output
LLM Responsibility for API Scripts
The run_rfem_script, run_rstab_script, and run_rsection_script tools execute arbitrary Python code against the live application. The LLM is responsible for composing correct and valid API scripts — the MCP server simply runs whatever code it receives and returns the output or any errors.
To write correct scripts, the LLM should consult the Dlubal API Documentation, which covers all available objects, methods, and usage patterns for the gRPC-based API.
Requirements
- Python 3.11 or higher
- A running Dlubal application (RFEM 6, RSTAB 9, or RSECTION 1)
- Active API Service subscription — see dlubal.api for details
Installation
pip install "dlubal-mcp[rfem]" # RFEM 6
pip install "dlubal-mcp[rstab]" # RSTAB 9
pip install "dlubal-mcp[rsection]" # RSECTION 1
pip install "dlubal-mcp[all]" # All products
Available MCP Tools
| Tool | Description |
|---|---|
run_rfem_script |
Execute Python code against a running RFEM 6 instance |
read_rfem_results |
Read an allowlisted, bounded RFEM result summary without executing caller code or changing the model |
run_rstab_script |
Execute Python code against a running RSTAB 9 instance |
run_rsection_script |
Execute Python code against a running RSECTION 1 instance |
health_check |
Server status: installed products, running state, available tools |
Typed RFEM result access
read_rfem_results is the preferred path for read-only agents. It accepts only five
fixed result types (calculation_status, member internal forces, node deformations,
stability critical load factors, and steel member design ratios). Result queries
require bounded integer object numbers (except stability) and validated loading
identifiers. Both filters are verified against every returned row. It never calculates, writes, opens,
saves or switches a model.
The response is bounded to at most 100 rows and contains only allowlisted numeric
fields, units, the active model GUID, the RFEM version, a complete model-input
state_fingerprint and a canonical result_hash. The fingerprint is produced
from RFEM's Python-gRPC model export before and after the result query. The
export is canonicalised and hashed locally, then deleted; its model contents
never leave the machine. If the model changes during the read or RFEM cannot
produce the complete snapshot, the tool returns unavailable fail-closed.
Model paths, object names, arbitrary RFEM warning text and exception messages are not
returned. no_results and unavailable are explicit states, not successful checks.
Related
- dlubal.api — the underlying gRPC client library
- Dlubal API Documentation — reference for all API objects and methods used in scripts
- Dlubal Software
Release files for dlubal-mcp 1.0.17
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dlubal_mcp-1.0.17.tar.gz | 79.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dlubal_mcp-1.0.17-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 144.4 kB
Release files / dlubal_mcp-1.0.17.tar.gz
| Download URL | dlubal_mcp-1.0.17.tar.gz |
|---|---|
| Size | 79.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
255759790074daac37731bfa8c6bd78044a167a2d634e56d2b3f918ec5872a68
|
|
BLAKE2b-256 checksum How to use checksums |
c5f22481da11a1858d1779e35fc677b92e77831408e65d100b78ab93489b3973
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Release files / dlubal_mcp-1.0.17-py3-none-any.whl
| Download URL | dlubal_mcp-1.0.17-py3-none-any.whl |
|---|---|
| Size | 65.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ff97fa925b876301a7c5fd8ffb785ff4a1ade6d8896f4f257f633d7c8ca5acee
|
|
BLAKE2b-256 checksum How to use checksums |
a7bd1a1970c827322df0bc59bcf58a5063f2efeb790d27620e44b0353c6e07b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|