RSAP MCP
Enables Claude to control Autodesk Robot Structural Analysis Professional via COM API for modeling, loads, analysis, and results retrieval.
README
RSAP MCP — Robot Structural Analysis ↔ Claude
MCP server cho Autodesk Robot Structural Analysis Professional 2027 — dùng với Claude hoặc Codex.
Mục lục / Contents
- Yêu cầu / Requirements
- Bước 1 — Cài đặt / Install
- Bước 2 — Đăng ký với Claude Desktop / Register with Claude Desktop
- Bước 3 — Dùng thử / First run
- Dùng với Codex / Use with Codex
- Kiểm thử bằng client rời / Test with the standalone client
- Thêm công cụ mới / Add a new tool
- Danh sách công cụ / Tool list
- Xử lý sự cố / Troubleshooting
- Cấu trúc thư mục / Repository layout
Yêu cầu / Requirements
| OS | Windows 10/11 (64-bit) |
| Robot | Robot Structural Analysis Professional 2027, đã cài & mở ít nhất một lần |
| Python | 3.10+, 64-bit |
| uv | powershell -c "irm https://astral.sh/uv/install.ps1 | iex" |
| Host | Claude Desktop hoặc Codex |
Bước 1 — Cài đặt / Install
git clone https://github.com/nhantruong96/rsap-mcp.git
cd rsap-mcp
uv sync
Chạy lại uv sync sau mỗi git pull.
Kiểm tra (không cần Robot):
uv run python -m rsap_mcp --selfcheck
# -> [selfcheck] 35 tools registered ... OK
Tùy chọn thêm / optional extras:
uv sync --extra dev # + ruff
Tùy chọn — chép .env.example thành .env rồi sửa RSAP_VISIBLE, RSAP_INTERACTIVE,
RSAP_AUTO_CONNECT, RSAP_LOG_LEVEL, RSAP_LOG_FILE, RSAP_PROJECT_DIR.
Không có uv:
powershell -ExecutionPolicy Bypass -File .\scripts\install.ps1
Bước 2 — Đăng ký với Claude Desktop / Register with Claude Desktop
powershell -ExecutionPolicy Bypass -File .\scripts\register_claude_desktop.ps1
Hoặc sửa tay %APPDATA%\Claude\claude_desktop_config.json: chép một trong hai khối dưới đây,
thay C:\path\to\rsap-mcp bằng đường dẫn thật (mẫu: config/claude_desktop_config.example.json).
A. Qua uv — khuyến nghị:
{
"mcpServers": {
"rsap": {
"command": "uv",
"args": ["--directory", "C:/path/to/rsap-mcp", "run", "rsap-mcp"]
}
}
}
B. Trỏ thẳng Python của venv — khi uv không có trong PATH của Claude Desktop:
{
"mcpServers": {
"rsap": {
"command": "C:\\path\\to\\rsap-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "rsap_mcp"],
"env": {
"PYTHONPATH": "C:\\path\\to\\rsap-mcp\\src",
"RSAP_VISIBLE": "true",
"RSAP_LOG_LEVEL": "INFO"
}
}
}
}
Sau khi sửa: thoát hẳn rồi mở lại Claude Desktop.
Log: %APPDATA%\Claude\logs\mcp-server-rsap.log.
Bước 3 — Dùng thử / First run
Mở Claude Desktop và ra lệnh bằng lời:
"Kết nối Robot, tạo dự án khung 2D, dựng khung cổng nhịp 6 m cao 4 m bằng thép S235 IPE300, ngàm 2 chân, thêm trọng lượng bản thân và tải mái 10 kN/m, chạy tổ hợp ULS 1.35×TT+1.5×HT rồi cho biết phản lực chân cột và mô men lớn nhất ở xà."
"Connect to Robot, make a 2D frame, build a 6×4 m portal in S235 IPE300, fix both bases, add self-weight and a 10 kN/m roof load, run a 1.35G+1.5Q ULS combination, then tell me the base reactions and peak rafter moment."
Trình tự chuẩn / the workflow:
connect → new_project → add_nodes → add_bars → define_section/material → assign →
define_support → assign_support → add_load_case → add_*_load → add_combination →
calculate → bar_forces / node_displacement / node_reaction → save_project
- Đơn vị: m, N, N·m.
- Chuỗi chọn đối tượng:
'1to10','1 2 3','1to20by2'. - Chờ lâu ở tool đầu tiên — Robot đang mở.
Dùng với Codex / Use with Codex
-
Mở
C:\Users\<YOU>\.codex\config.toml(macOS/Linux:~/.codex/config.toml). -
Thêm khối sau, sửa đường dẫn (mẫu:
config/codex_config.example.toml):[mcp_servers.rsap] enabled = true command = 'C:\path\to\rsap-mcp\.venv\Scripts\python.exe' args = ["-m", "rsap_mcp"] startup_timeout_sec = 30 tool_timeout_sec = 600 # rsap_calculate chạy lâu default_tools_approval_mode = "prompt" # "auto" nếu không muốn hỏi từng tool [mcp_servers.rsap.env] RSAP_VISIBLE = "true" RSAP_INTERACTIVE = "true" RSAP_AUTO_CONNECT = "true" RSAP_LOG_LEVEL = "INFO"Hoặc thêm bằng một dòng lệnh / or add it with the CLI:
codex mcp add rsap --env RSAP_VISIBLE=true --env RSAP_AUTO_CONNECT=true -- ` "C:\path\to\rsap-mcp\.venv\Scripts\python.exe" -m rsap_mcp -
Kiểm tra:
codex mcp list. -
Thoát hẳn và mở lại app Codex, gõ
/mcpđể thấyrsapvà 35 tools.
Giới hạn tool: thêm enabled_tools = [...] hoặc disabled_tools = [...] vào khối [mcp_servers.rsap].
Kiểm thử bằng client rời / Test with the standalone client
uv run python client\test_client.py # liệt kê tool qua MCP thật
uv run python client\test_client.py --call rsap_status
uv run python client\examples\01_portal_frame.py # end-to-end (cần Robot)
uv run ruff check . # lint
Thêm công cụ mới / Add a new tool
-
Mở module phù hợp trong
src/rsap_mcp/tools/(project_,modeling_,property_,support_,load_,analysis_,results_tools.py). -
Viết hàm bên trong
register(mcp), gắn@mcp.tool()rồi@com_call, kèm type hints và docstring Google-style:def register(mcp): @mcp.tool() @com_call def rsap_count_objects() -> dict: """Return node and bar counts.""" c = conn() return {"nodes": c.count(c.nodes), "bars": c.count(c.bars)} -
Gọi hằng RobotOM bằng tên qua
const("I_..."), không ghi số trực tiếp. -
Trả về
dicthoặc model Pydantic; lỗi thìraise. -
Không dùng
print(); log quaconfig.py. -
Chạy
uv run python -m rsap_mcp --selfcheckvàuv run ruff check ..
Danh sách công cụ / Tool list
35 tool (tiền tố rsap_) và 3 resource. Dấu * = tham số bắt buộc.
Session & Project
| Tool | Mô tả / Description | Tham số / Parameters |
|---|---|---|
rsap_connect |
Connect to (or launch) Autodesk Robot Structural Analysis Professional. | visible:boolean, interactive:boolean |
rsap_status |
Report connection status and a summary of the current Robot model. | (none) |
rsap_new_project |
Create a new, empty Robot project. | project_type:string |
rsap_open_project |
Open an existing Robot model from an absolute .rtd path. | path:string * |
rsap_save_project |
Save the current model. Pass a path to Save As, or omit to Save in place. | path:string/null |
rsap_close_project |
Close the current project (Robot itself stays open). | (none) |
Modeling
| Tool | Mô tả / Description | Tham số / Parameters |
|---|---|---|
rsap_add_node |
Create a single node at the given coordinates (metres). | x:number *, y:number *, z:number *, number:integer/null |
rsap_add_nodes |
Create many nodes at once. | nodes:array * |
rsap_add_bar |
Create a bar (beam/column) between two existing nodes, optionally assigning section/material. | start_node:integer *, end_node:integer *, number:integer/null, section:string/null, material:string/null |
rsap_add_bars |
Create many bars at once. | bars:array * |
rsap_list_nodes |
List nodes with their coordinates. | limit:integer |
rsap_list_bars |
List bars with their start/end node numbers. | limit:integer |
rsap_delete_objects |
Delete nodes or bars matching a selection string. | object_type:string *, selection:string * |
Sections & Materials
| Tool | Mô tả / Description | Tham số / Parameters |
|---|---|---|
rsap_define_section |
Define a bar section label by loading a profile from Robot's active database. | name:string *, db_section:string/null, material:string/null |
rsap_define_material |
Define a material label, either loaded from Robot's material database or from explicit properties. | name:string *, from_database:string/null, material_type:string/null, e:number/null, nu:number/null, ro:number/null, kirchoff:number/null |
rsap_assign_section |
Assign an existing section label to a set of bars. | section_name:string *, bars:string * |
rsap_assign_material |
Assign an existing material label to a set of bars. | material_name:string *, bars:string * |
rsap_list_sections |
List the names of section labels defined in the model. | (none) |
Supports
| Tool | Mô tả / Description | Tham số / Parameters |
|---|---|---|
rsap_define_support |
Define a support (boundary condition) label. True = restrained. | name:string *, ux:boolean, uy:boolean, uz:boolean, rx:boolean, ry:boolean, rz:boolean |
rsap_assign_support |
Assign an existing support label to a set of nodes. | support_name:string *, nodes:string * |
Loads & Combinations
| Tool | Mô tả / Description | Tham số / Parameters |
|---|---|---|
rsap_add_load_case |
Create a simple load case. | name:string *, nature:string, analysis:string, number:integer/null |
rsap_add_self_weight |
Add a self-weight (dead) load to a case. | case_number:integer *, direction:string, factor:number, selection:string |
rsap_add_nodal_force |
Add a nodal force/moment to a case (global axes). | case_number:integer *, nodes:string *, fx:number, fy:number, fz:number, cx:number, cy:number, cz:number |
rsap_add_bar_uniform_load |
Add a uniformly distributed load along bars. | case_number:integer *, bars:string *, px:number, py:number, pz:number, local:boolean, projected:boolean |
rsap_add_bar_point_load |
Add a concentrated (point) force/moment on bars. | case_number:integer *, bars:string *, fx:number, fy:number, fz:number, cx:number, cy:number, cz:number, position:number, relative:boolean, local:boolean |
rsap_add_combination |
Create a load combination from weighted load cases. | name:string *, factors:array *, combo_type:string, nature:string, number:integer/null |
rsap_list_load_cases |
List load cases and combinations in the model. | (none) |
Analysis
| Tool | Mô tả / Description | Tham số / Parameters |
|---|---|---|
rsap_generate_mesh |
Generate the finite-element mesh. | (none) |
rsap_calculate |
Run the structural analysis (solve the model). | (none) |
rsap_calculation_status |
Report whether analysis results are currently available. | (none) |
Results
| Tool | Mô tả / Description | Tham số / Parameters |
|---|---|---|
rsap_bar_forces |
Internal forces at a point along a bar (local axes). | bar:integer *, case:integer *, position:number |
rsap_bar_force_envelope |
Sample a bar along its length and return the extreme internal forces. | bar:integer *, case:integer *, samples:integer |
rsap_node_displacement |
Nodal displacement (global axes). | node:integer *, case:integer * |
rsap_node_reaction |
Support reaction at a node (global axes). | node:integer *, case:integer * |
rsap_results_summary |
Summarise results for a case: peak nodal displacement and peak bar moment. | case:integer *, max_nodes:integer, max_bars:integer |
Resources
| URI | Nội dung / Content |
|---|---|
rsap://reference/enums |
Bản đồ friendly → hằng RobotOM. |
rsap://reference/sections |
Hướng dẫn tiết diện & vật liệu. |
rsap://reference/cheatsheet |
Quy trình end-to-end. |
Tham chiếu RobotOM COM API để mở rộng server: docs/RobotOM_API_Reference.md.
Xử lý sự cố / Troubleshooting
| Triệu chứng / Symptom | Xử lý / Fix |
|---|---|
| Server không hiện trong Claude | Kiểm tra command/PYTHONPATH, khởi động lại Claude, xem mcp-server-rsap.log. |
/mcp trong Codex không thấy rsap |
Thoát hẳn & mở lại Codex; chạy codex mcp list; kiểm tra command trong config.toml. |
constant 'I_...' not found |
Mở Robot một lần để đăng ký type library; đối chiếu tên hằng trong enums.py. |
| Kết nối COM thất bại | Dùng Python 64-bit; kiểm tra Robot đã cài đúng bitness. |
| Giao thức hỏng ngay khi khởi động | Tìm thư viện đang in ra stdout; chuyển log sang stderr/file. |
ModuleNotFoundError: mcp.server.fastmcp |
Đang dùng mcp 2.x; gói đã ghim mcp[cli]<2 — chạy lại uv sync. |
ModuleNotFoundError: mcp khi chạy client |
Chạy qua venv: uv run python client\.... |
Could not read results |
Chạy rsap_calculate() trước; kiểm tra số bar/node/case có tồn tại. |
LoadFromDBase lỗi |
Đặt đúng CSDL tiết diện/vật liệu trong Job Preferences (IPE300 cần catalog châu Âu). |
| Treo khi Calculate | Đóng hộp thoại đang chờ trong cửa sổ Robot. |
| Tool đầu tiên rất chậm / timeout | Robot đang khởi động — tăng tool_timeout_sec hoặc mở Robot sẵn. |
| Model gọi tool sai thứ tự | Nhắc trong prompt "làm tuần tự theo cheatsheet". |
Cấu trúc thư mục / Repository layout
rsap-mcp/
├── src/rsap_mcp/ # MCP server (server.py, robot_app.py, com_utils.py,
│ │ # enums.py, config.py)
│ ├── tools/ # 35 tool rsap_* theo nhóm
│ ├── models/ # pydantic schemas
│ └── resources/ # rsap://reference/*
├── client/ # client MCP rời + examples
├── scripts/ # install / run / register (PowerShell)
├── config/ # claude_desktop_config.example.json, codex_config.example.toml
├── native/RsapHelper/ # DLL C# tùy chọn
├── docs/ # RobotOM_API_Reference.md
├── pyproject.toml
└── uv.lock # `uv sync` đọc file này
License
MIT. © 2026 PORTCOAST Taskforce.
推荐服务器
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 模型以安全和受控的方式获取实时的网络信息。