vn-revit-mcp
Provides tools for interacting with Autodesk Revit models, including creating and modifying building elements such as levels, walls, rooms, floors, doors, columns, and roofs, as well as generating statistics and quantity takeoffs for doors, rooms, walls, floors, structures, parameter checks, and Excel export.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vn-revit-mcpĐếm số cửa và phòng trong mô hình Revit đang mở"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
vn-revit-mcp
Bộ công cụ tiếng Việt để dùng Claude (hoặc AI khác hỗ trợ MCP) với Autodesk Revit, gồm hai phần:
Phần | Làm gì | Chạy bằng |
A. Vẽ, dựng mô hình | Claude dựng tầng, tường, phòng, sàn, cửa, cột, mái từ mô tả hoặc từ bản vẽ AutoCAD | MCP có sẵn của pyRevit 7 + skill tiếng Việt |
B. Thống kê, khối lượng | Thống kê cửa, phòng; khối lượng tường, sàn, kết cấu; kiểm tham số thiếu; xuất Excel | MCP vn-revit-mcp trong repo này |
Hai phần chạy song song: Claude dùng phần A để dựng, rồi dùng phần B để kiểm lại khối lượng vừa dựng.
Trạng thái: bản thử 0.2.0. Hãy thử trên một mô hình nháp trước. Gặp lỗi xin mở Issue.
Mục lục
Related MCP server: Revit MCP Server
1. Cách hoạt động
Claude Code / Claude Desktop / Cursor ...
│ │
MCP "pyrevit" (vẽ) MCP "vn-revit" (thống kê)
+ skill ve-revit │
│ │ gọi lệnh: pyrevit agent run <script cố định>
▼ ▼
pyRevit CLI ──(đường ống nội bộ Windows, không mở cổng mạng)──►
pyRevit agent host trong Revit ──► Revit API ──► mô hình đang mởPhần A, vẽ: Claude tự viết một đoạn Python dùng Revit API (ví dụ "tạo 4 bức tường 200 quanh lô 5x15 m") rồi gửi qua công cụ run_modify của pyRevit. pyRevit chạy đoạn code đó bên trong Revit, gom mọi thay đổi vào một nhóm, rồi hiện hộp Keep / Discard ngay trong Revit. Bạn bấm Keep thì thay đổi được lưu thành một mục Undo; bấm Discard thì mô hình trở lại như cũ.
Skill ve-revit là "sổ tay" dạy Claude làm việc này theo cách của người Việt: số liệu mm, cốt ±0.000 tại sàn tầng 1, dựng từng chặng, chạy thử trước khi chạy thật, tra loại tường, cửa có sẵn trong mô hình thay vì đoán tên, không tự bịa kích thước.
Phần B, thống kê: vn-revit-mcp chỉ chạy 9 script viết sẵn trong gói. AI không gửi code tùy ý qua phần này được. 10 trên 11 công cụ chỉ đọc mô hình.
2. Yêu cầu
Thứ | Ghi chú |
Windows 10 hoặc 11 | Revit chỉ chạy trên Windows |
Autodesk Revit | Nên dùng 2024 hoặc 2025: tài liệu pyRevit ghi agent runtime đã kiểm trên hai bản này |
pyRevit 7.0 trở lên | Bản có agent runtime và MCP, tải ở pyRevit Releases |
uv | Trình cài gói Python, xem hướng dẫn cài uv |
Claude Code | Hoặc Claude Desktop, Cursor, VS Code, Codex |
Một mô hình Revit có sẵn loại tường, sàn, family cửa | Nên mở từ template kiến trúc. Skill không tự tải family |
3. Cài đặt
3.1. Cách nhanh: nhờ Claude cài
Mở Claude Code và dán câu sau:
Cài bộ vn-revit-mcp cho tôi theo README ở https://github.com/andyluu98/vn-revit-mcp, mục 3.2, đủ 8 bước.
Kiểm tra máy đã có pyRevit 7 và uv chưa; thiếu thì hướng dẫn tôi từng bước vì tôi không rành terminal.
Đặt pyRevit ở chế độ ask (mỗi lần sửa mô hình đều hỏi tôi trong Revit). Không dùng chế độ auto.
Làm xong thì nhắc tôi khởi động lại Revit và Claude Code, rồi kiểm tra kết nối.3.2. Cách tự làm
Các lệnh dưới đây chạy trong PowerShell (bấm Start, gõ PowerShell). Mỗi khi cài thêm chương trình, nên mở cửa sổ PowerShell mới.
Bước 1. Cài pyRevit 7. Tải file .exe ở trang Releases, cài với lựa chọn mặc định. Kiểm tra:
pyrevit --versionBước 2. Bật agent host và đặt chế độ hỏi trước khi sửa:
pyrevit configs agent enable
pyrevit configs agent policy askChế độ | Nghĩa |
| Chỉ đọc, chạy thử. Không sửa được mô hình |
| Mỗi lần sửa, Revit hiện hộp Keep / Discard để bạn quyết |
| Sửa luôn, không hỏi. Không nên dùng với mô hình thật |
Bước 3. Đăng ký MCP của pyRevit (phần vẽ) vào Claude Code:
pyrevit mcp install claudeDùng client khác thì thay claude bằng codex, cursor, vscode hoặc opencode. Với Claude Desktop, thêm vào claude_desktop_config.json:
{
"mcpServers": {
"pyrevit": { "command": "pyrevit", "args": ["mcp"] }
}
}Bước 4. Đăng ký vn-revit-mcp (phần thống kê):
claude mcp add vn-revit -s user '--' uvx --from git+https://github.com/andyluu98/vn-revit-mcp vn-revit-mcpTrên PowerShell phải để '--' trong ngoặc đơn. Trên cmd hoặc bash thì viết -- không cần ngoặc. Với Claude Desktop, thêm vào cùng file cấu hình:
"vn-revit": {
"command": "uvx",
"args": ["--from", "git+https://github.com/andyluu98/vn-revit-mcp", "vn-revit-mcp"]
}Bước 5. Cài skill ve-revit cho cả Claude Code và pyRevit, kèm thư mục dữ liệu mặt bằng mẫu:
uvx --from git+https://github.com/andyluu98/vn-revit-mcp vn-revit-mcp cai-skill --workspace D:\DuAn\revit-workspaceLệnh này chép skill vào:
Nơi | Ai đọc |
| Claude Code |
| Công cụ |
Thư mục | Dữ liệu mặt bằng mẫu |
Đã có bản cũ khác nội dung thì bản cũ được chuyển vào Documents\vn-revit-mcp\_backup, không bị xóa. File đã có trong thư mục workspace thì giữ nguyên.
Bước 6. Cho pyRevit đọc skill của người dùng:
pyrevit configs agent skills enableBước 7. Cho Claude Code chờ lâu hơn khi bạn đang xem hộp Keep / Discard. Mặc định Claude Code có thể bỏ cuộc trước khi bạn kịp bấm. Đặt 10 phút:
setx MCP_TOOL_TIMEOUT 600000Bước 8. Khởi động lại Revit, mở một mô hình, khởi động lại Claude Code. Kiểm tra:
pyrevit agent status
claude mcp listThấy phiên Revit trong danh sách đầu, thấy pyrevit và vn-revit ở danh sách sau là xong. Mở cuộc trò chuyện mới và hỏi: "Kiểm tra kết nối Revit".
4. Vẽ trên Revit bằng Claude
4.1. Quy trình một lần dựng
1. Bạn đưa yêu cầu: mô tả, ảnh, PDF hoặc DWG mặt bằng
2. Claude đọc get_context (Revit nào, mô hình nào, chế độ ask chưa)
3. Claude tra loại tường, sàn, cửa, tầng có sẵn trong mô hình
4. Claude ghi số liệu mặt bằng (mm) vào nha_pho_mau.py trong thư mục workspace, chạy kiem_tra()
5. Mỗi chặng: chạy thử (dry run) → báo số phần tử → chạy thật → bạn bấm Keep / Discard trong Revit
6. Claude chụp ảnh 3D, mặt bằng để tự kiểm
7. Claude gọi vn-revit-mcp đối chiếu khối lượng với số liệu ban đầuThứ tự chặng: tầng → tường → phòng → sàn → cửa đi, cửa sổ → cột, dầm, mái, cầu thang. Mỗi chặng là một mục Undo riêng; chặng sau lỗi không làm mất chặng trước. Mọi phần tử Claude tạo đều được ghi Comments dạng vn:<chặng> để chạy lại chặng đó mà không bị trùng.
4.2. Câu lệnh mẫu
Dựng từ mô tả:
Dùng skill ve-revit. Dựng nhà phố 2 tầng trên lô 5x15 m trong mô hình Revit đang mở:
tầng cao 3600, tường bao 200, tường ngăn 100. Tầng 1: phòng khách phía trước sâu 6 m, bếp ăn,
cuối nhà WC và kho. Tầng 2: hai phòng ngủ. Cửa chính rộng 2400 ở mặt tiền.
Làm từng chặng, chạy thử trước, chờ tôi bấm Keep rồi mới làm chặng sau.Dựng từ bản vẽ AutoCAD:
Dùng skill ve-revit. Đọc mặt bằng tầng 1 và tầng 2 trong D:\DuAn\NhaPho\KT-02.pdf (hoặc file .dwg).
Ghi số liệu vào D:\DuAn\revit-workspace\nha_pho_mau.py, chạy kiem_tra(), báo tôi chỗ bản vẽ lệch
trước khi dựng. Chưa dựng gì khi tôi chưa duyệt bảng số liệu.Sửa một phần:
Dùng skill ve-revit. Dời cửa D2 tầng 1 sang phải 300 mm và đổi sang cửa 800x2200.
Chạy thử, báo trước khi chạy thật.Kiểm sau khi dựng:
Dùng vn-revit: tổng chiều dài tường 200 và 100 từng tầng, diện tích từng phòng,
số cửa theo kích thước. So với nha_pho_mau.py và báo chỗ lệch.4.3. Dữ liệu mặt bằng trong workspace
Claude không dán lại số liệu vào mỗi đoạn code. Số liệu nằm trong một file Python ở thư mục workspace, mỗi lần chạy pyRevit nạp lại file đó. Bạn mở nha_pho_mau.py bằng Notepad là đọc được:
TANG = [("Tang 1", 0), ("Tang 2", 3600), ("Mai", 7200)]
TUONG = [
{"ten": "T1-truoc", "tu": (0, 0), "den": (5000, 0), "day": 200, "tang": "Tang 1", "den_tang": "Tang 2"},
...
]
CUA = [
{"loai": "cua_di", "ky_hieu": "D1", "tuong": "T1-truoc", "vi_tri": (2500, 0), "rong": 2400, "cao": 2600, "cao_be": 0},
...
]Đơn vị mm, gốc tọa độ tại giao trục góc trước bên trái, trục x dọc mặt tiền, trục y vào sâu.
Tường ghi theo trục tường. Cửa ghi tọa độ điểm giữa cửa nằm trên trục tường.
kiem_tra()báo lỗi trước khi dựng: tầng không có, tường dài bằng 0, cửa lệch trục tường, cửa quá sát chỗ giao tường (Revit cần ít nhất nửa bề rộng cửa cộng 152 mm), số phòng trùng.File mẫu là nhà phố mẫu 5x15 m, chỉ để minh họa cách ghi, không phải công trình thật.
4.4. Công cụ của MCP pyRevit
Theo tài liệu pyRevit 7 (docs/agent-runtime.md):
Công cụ | Sửa mô hình | Dùng để |
| Không | Bản Revit, mô hình, view, chọn, tầng, chế độ policy, engine Python |
| Không | Đọc skill hướng dẫn (có |
| Không | Xem tham số, vị trí của tối đa 50 phần tử |
| Không | Tra tên hàm, lớp Revit API ngay trong Revit đang chạy |
| Không bao giờ | Chạy script chỉ đọc; thay đổi luôn bị hoàn tác |
| Sau khi bạn bấm Keep | Chạy script sửa mô hình; |
| Không | Chụp ảnh view, 3D để Claude tự xem kết quả |
| Không | Chọn, zoom, cô lập tạm phần tử trong view |
| Không | Xem lại một lần chạy đã ghi |
4.5. Giới hạn cần biết
Family phải có sẵn trong mô hình. Không có cửa đúng kích thước, Claude sẽ hỏi bạn nạp family hoặc nhân bản type. Skill không tự tải family từ Internet.
Tên loại khác nhau giữa các template. Claude luôn tra tên trong mô hình, không dùng tên nhớ sẵn.
Cầu thang, mái phức tạp dễ lỗi hơn tường, sàn. Nên dựng riêng, kiểm kỹ.
Mô hình dựng theo dữ liệu, không thay kiến trúc sư, kỹ sư. Hồ sơ xin phép, thi công phải được người có chứng chỉ kiểm tra.
5. Thống kê và khối lượng
Công cụ | Việc | Sửa mô hình? |
| Kiểm tra pyRevit và các phiên Revit đang chạy | Không |
| Tên mô hình, bản Revit, các tầng và cao độ (m), view đang mở | Không |
| Đếm phần tử theo từng hạng mục | Không |
| Cửa đi, cửa sổ theo family, loại, kích thước (mm), tầng; cửa chưa có ký hiệu | Không |
| Phòng: số, tên, tầng, diện tích (m²), chu vi; phòng chưa đặt, chưa khép kín | Không |
| Tường theo loại và tầng: dài (m), diện tích (m²), thể tích (m³), độ dày; vách kính tính riêng | Không |
| Sàn theo loại và tầng: diện tích (m²), thể tích (m³), độ dày | Không |
| Thể tích (m³) cột, dầm, móng theo vật liệu | Không |
| Phần tử chưa có hoặc để trống một tham số (ví dụ cửa thiếu Mark) | Không |
| Xuất Excel: bảng khối lượng và các sheet chi tiết | Không (chỉ ghi file Excel) |
| Gán giá trị một tham số cho tối đa 200 phần tử. Mặc định chỉ chạy thử | Có, sau khi bạn bấm Keep |
Số liệu đổi từ đơn vị nội bộ của Revit (feet) sang m, m², m³, mm. Tổng tính trên số đầy đủ, chỉ làm tròn 2 chữ số khi hiển thị.
Câu hỏi mẫu:
"Mô hình đang mở có bao nhiêu cửa đi, cửa sổ? Chia theo tầng."
"Tổng diện tích phòng từng tầng? Có phòng nào chưa khép kín không?"
"Cửa nào chưa có Mark?"
"Xuất bảng khối lượng ra Excel vào D:\DuAn\NhaPho\KhoiLuong."
"Chạy thử: ghi Comments = 'Kiểm tra PCCC' cho các cửa id 12345, 12346."
File Excel:
Lưu vào thư mục bạn chọn, hoặc
Documents\vn-revit-mcpnếu không chọn. Tên01_khoi-luong-revit-<ten-mo-hinh>.xlsx, số tăng dần, không bao giờ ghi đè.Sheet
KhoiLuong: STT, Mã hiệu, Tên công việc, Đơn vị, Diễn giải, KL thiết kế, Hao hụt (%), KL hao hụt, KL mua, Nguồn. Ô Hao hụt (%) để trống, tô vàng cho kỹ sư điền; KL hao hụt và KL mua tự tính bằng công thức. Mã hiệu ghi[Chờ bổ sung]. Dòng nào Revit không trả khối lượng thì Diễn giải ghi "Cần xác nhận lại".Sheet chi tiết
Tuong,San,KetCau,Cua,Phong; sheetNguonghi mô hình, bản Revit, thời điểm trích và các lưu ý.Khối lượng phụ thuộc cách dựng mô hình. Phần giao giữa các cấu kiện chưa join bị tính hai lần. Luôn đối chiếu bản vẽ trước khi dùng cho hợp đồng.
6. An toàn và dữ liệu
Phần A (vẽ) chạy code do AI viết, có toàn quyền như tài khoản Windows của bạn. pyRevit bảo vệ mô hình (gom thay đổi, chặn lưu file trong lúc chạy, hỏi Keep / Discard) nhưng không phải hộp cát: đoạn code vẫn đọc, ghi được file trên máy. Vì vậy:
Chỉ dùng với AI client bạn tin cậy. Không đưa cho Claude tài liệu lạ có chứa câu lệnh (file tải từ nguồn không rõ, email lạ) rồi để nó dựng mô hình.
Giữ chế độ
ask. Đọc tóm tắt chạy thử trước khi bấm Keep.Làm trên bản sao mô hình khi mới dùng.
Phần B (thống kê):
Không có công cụ chạy code tùy ý: chỉ 9 script cố định, đã kiểm thử.
Tham số AI truyền vào đều bị kiểm: id là số nguyên dương, tối đa 200; tên tham số tối đa 120 ký tự; hạng mục phải là
OST_...hoặc tên trong danh sách; chỉ gọipyrevit.exe, không gọi file.bat,.cmd.Tên lấy từ mô hình không bao giờ được ghi thành công thức trong Excel.
Chung cho cả hai phần:
Không mở cổng mạng. Lệnh
pyrevitnói chuyện với Revit qua đường ống nội bộ chỉ tài khoản Windows của bạn dùng được.Dữ liệu mô hình đi ra ngoài máy. Những gì công cụ trả về (tên loại, tầng, tham số...) được gửi tới nhà cung cấp mô hình AI bạn đang dùng. Kiểm tra quy định bảo mật của dự án trước khi dùng với hồ sơ khách.
pyRevit lưu lại từng lần chạy. Script, đầu vào, kết quả, ảnh chụp được lưu dạng văn bản rõ trong
%APPDATA%\pyRevit\agent, tối đa 14 ngày.
Báo lỗ hổng bảo mật: xem SECURITY.md.
7. Xử lý lỗi
Lỗi | Nghĩa | Cách xử lý |
| Không thấy lệnh | Cài pyRevit 7, mở PowerShell mới; hoặc đặt biến |
| Không có Revit nào bật agent host |
|
| Revit đang bận hoặc có hộp thoại mở | Đóng hộp thoại (kể cả nhắc lưu file), chờ lệnh khác xong |
| Chưa mở mô hình | Mở một mô hình trong Revit |
| pyRevit đang chỉ đọc |
|
| Hết giờ chờ trong lúc hộp Keep / Discard còn mở | Xem danh sách Undo trong Revit trước khi chạy lại; tăng |
| Đang mở nhiều Revit | Ghi rõ năm Revit trong câu hỏi, hoặc đặt biến |
| Revit báo lỗi khi dựng (ví dụ cửa không cắt được tường) | Thường do cửa quá sát chỗ giao tường hoặc rộng hơn đoạn tường: sửa dữ liệu, chạy |
| Đoạn code quên đóng transaction | Nhờ Claude sửa script và chạy lại; mô hình đã được hoàn tác |
| Chạy quá lâu | Chia nhỏ chặng, kiểm tra Revit có treo không |
| Tham số truyền vào vn-revit-mcp sai | Xem |
Claude không thấy skill | Chưa cài hoặc chưa bật | Làm lại bước 5, 6; khởi động lại Claude Code và Revit |
8. Gỡ cài đặt
claude mcp remove vn-revit -s user
pyrevit mcp uninstall claude
pyrevit configs agent disableSkill nằm ở %USERPROFILE%\.claude\skills\ve-revit và %APPDATA%\pyRevit\agent\skills\ve-revit; muốn bỏ thì xóa hai thư mục này bằng tay.
9. Phát triển
git clone https://github.com/andyluu98/vn-revit-mcp
cd vn-revit-mcp
uv sync
uv run pytestThư mục | Nội dung |
| MCP server và 11 công cụ |
| Script chạy trong Revit: chỉ cú pháp IronPython 2.7, chỉ ký tự ASCII |
| Skill dựng mô hình và workspace mẫu |
| Lệnh |
| Lệnh |
Kiểm thử tự kiểm cú pháp IronPython 2.7, ký tự ASCII của script và workspace, tính nhất quán của dữ liệu mẫu, và việc cài skill không bao giờ xóa bản cũ.
10. Liên quan đến pyRevit và nguồn tham khảo
vn-revit-mcp là dự án độc lập, không thuộc pyRevitLabs. Dự án gọi lệnh pyrevit đã cài trên máy và không chép mã nguồn của pyRevit. pyRevit có giấy phép GPL-3.0 riêng; vn-revit-mcp dùng giấy phép MIT.
Nguồn (tra ngày 16/10/2026, bản pyRevit v7.0.0.26278+2233 phát hành 06/10/2026):
Agent runtime, công cụ MCP, cấu hình, giới hạn:
docs/agent-runtime.mdtrong repo pyrevitlabs/pyRevitSkill gốc dựng mô hình:
pyrevitlib/pyrevit/agent/skills/modeling/SKILL.mdHàm dựng
create_wall,create_floor,create_room,place_hosted_instance:pyrevitlib/pyrevit/revit/db/create.pyLệnh
pyrevit agent runvà dạng JSON trả về:dev/pyRevitLabs/pyRevitCLI/PyRevitCLIAgentCmds.cs,dev/pyRevitLabs.PyRevit.Runtime/Agent/AgentRunService.cs
Available Tools
11 toolsdat_tham_soADestructive
Gán giá trị cho một tham số trên tối đa 200 phần tử.
chay_thu=True (mặc định): chỉ xem trước, mô hình được hoàn tác. chay_thu=False: sửa thật; Revit hiện hộp duyệt, người dùng bấm Giữ hoặc Hủy. Tham số độ dài, diện tích nhận giá trị theo đơn vị hiển thị của dự án (ví dụ "2500" mm). Chỉ dùng chay_thu=False khi người dùng đã đồng ý rõ ràng.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | ||
| revit | No | ||
| gia_tri | Yes | ||
| tham_so | Yes | ||
| chay_thu | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint=true). It discloses that the default dry-run is rolled back, that a real edit triggers a Revit Keep/Cancel confirmation dialog, that values are interpreted in project display units (e.g. "2500" mm), and that real edits require explicit user consent. This is exactly the behavioral context a destructive tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose, then breaks the mode/unit guidance into discrete lines with no filler. Dense but every line earns its place; slightly repetitive between the opening scope line and the mode lines.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the annotation safety profile is enriched by the rollback, confirmation-dialog, unit, and consent details. Minor gaps remain: behavior above the 200-element cap, the meaning of revit, and idempotency expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It documents chay_thu's two modes and the value/unit semantics of gia_tri, and implies ids (200-element cap), but leaves revit and tham_so unexplored. Partial compensation for a 5-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (gán giá trị = assign a value), the resource (a parameter on elements), and an explicit scope limit (tối đa 200 phần tử). An agent can immediately tell this is a write-back operation on Revit element parameters, distinct from the read-only statistics siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains the two operating modes and gives an explicit precondition: only use chay_thu=False when the user has explicitly agreed. This is strong mode-selection guidance, though it does not compare the tool against any sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dem_theo_hang_mucCRead-onlyIdempotent
Đếm số phần tử mô hình theo từng hạng mục (category).
| Name | Required | Description | Default |
|---|---|---|---|
| revit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds only the fact that counting is grouped by category, with no mention of scope, filtering, or misconfiguration behavior — nearly nothing beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no padding, which is appropriate in length. It is concise, though the brevity contributes to the under-specification noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is not required, but the tool still leaves the lone parameter undocumented and offers no usage routing across many similar siblings. For a counting tool in a crowded family, this is not enough for an agent to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter is the opaque token 'revit' (string or null). The description says nothing about what this parameter means, whether it selects a model/file/connection, or what happens when it is omitted, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (đếm/count) and resource (phần tử mô hình theo hạng mục/model elements by category), so an agent can tell it aggregates counts rather than listing elements. It does not explicitly contrast itself with siblings like thong_ke_phong or khoi_luong_*, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites, and no mention of an alternative among the ten sibling counting/statistics tools. The agent must infer from the name alone that this is the category-aggregation option.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
khoi_luong_ket_cauBRead-onlyIdempotent
Thể tích (m3) cột, dầm, móng kết cấu theo vật liệu và loại.
| Name | Required | Description | Default |
|---|---|---|---|
| revit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the description is not required to restate it. The description does add that results are grouped by material and type, which is genuinely useful behavioral context, but says nothing about project/level scope or connectivity requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the output (thể tích m3) followed by the subject scope. Every clause earns its place, though the brevity borders on under-specification rather than tight conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure needn't be explained, and read-only annotations cover risk. However, for a quantity take-off tool the description leaves unclear what scope is measured (whole model vs. selection vs. level), what the undocumented 'revit' argument does, and whether a prior connection check (kiem_tra_ket_noi) is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter 'revit' has no title description, type detail, or default explanation. The description never mentions this parameter, so an agent gets no guidance on what value to pass or what omitting it (null default) does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific computation (volume in m3) and enumerates the exact structural elements covered: cột, dầm, móng. This implicitly separates it from the sibling volume tools (khoi_luong_tuong for walls, khoi_luong_san for floors), though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the element scope: an agent can infer this is the tool for structural (column/beam/foundation) quantities rather than walls or slabs. There is no explicit when-to-use statement, no prerequisite (e.g. an active Revit connection), and no routing guidance toward or away from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
khoi_luong_sanBRead-onlyIdempotent
Khối lượng sàn theo loại và tầng: diện tích (m2), thể tích (m3), độ dày (mm).
| Name | Required | Description | Default |
|---|---|---|---|
| revit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the aggregation grain (by type and floor) and the units of the returned quantities, which is genuine extra context, but says nothing about scope limits, permissions, or how the optional revit argument changes behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the resource and grouping front-loaded and no filler. It is efficient, but the terseness comes at the cost of leaving usage and parameter information unstated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description's enumeration of area/volume/thickness is partly redundant and return values need not be explained. The remaining gap is the undocumented 'revit' parameter and the absence of any routing guidance among the several sibling quantity tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter 'revit' is never mentioned in the description. With a non-zero parameter count, the description is expected to compensate for the undocumented argument, and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('Khối lượng sàn' – floor quantity) and scopes it by type and floor, with the computed dimensions (area m2, volume m3, thickness mm) called out. This implicitly separates it from siblings like khoi_luong_ket_cau and khoi_luong_tuong, though it never names those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the structurally similar siblings (khoi_luong_ket_cau, khoi_luong_tuong, thong_ke_phong), nor any prerequisites. The agent must infer usage purely from the tool name and the word 'sàn'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
khoi_luong_tuongBRead-onlyIdempotent
Khối lượng tường theo loại và tầng: chiều dài (m), diện tích (m2), thể tích (m3), độ dày (mm).
| Name | Required | Description | Default |
|---|---|---|---|
| revit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered. The description adds useful domain context (what is measured and in which units: m, m2, m3, mm), but says nothing about the optional 'revit' parameter, prerequisites, or rate/scope limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the resource first, then the grouping and units. No filler, though it is terse enough that it omits helpful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the description covers the measured quantities. However, the undocumented 'revit' parameter and the absence of any routing guidance relative to sibling quantity tools leave gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter, 'revit', with 0% schema description coverage, and the description never mentions it. No meaning, format, or default behavior is added for it, so an agent gets no guidance on what to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific resource (khối lượng tường – wall quantity) and the grouping dimensions (theo loại và tầng – by type and floor), plus the measurable outputs (length, area, volume, thickness). The word 'tường' distinguishes it from the sibling quantity tools khoi_luong_san and khoi_luong_ket_cau, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the sibling quantity extractors (khoi_luong_san, khoi_luong_ket_cau) or the exporter xuat_excel_khoi_luong. The scope is inferable from the resource name, but no explicit context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kiem_tra_ket_noiARead-onlyIdempotent
Kiểm tra pyRevit và các phiên Revit đang chạy agent host. Gọi đầu tiên.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds useful scope context (it verifies both pyRevit and live Revit sessions hosting the agent) plus the prerequisite ordering, but does not describe failure/error behavior when Revit is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero padding, and the key action plus the 'call first' directive are both front-loaded and immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, full annotation coverage, and an output schema that documents the return structure, the description supplies everything needed to call it correctly. Only the failure-mode expectations are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 — there is nothing for the description to disambiguate, and the schema (empty object) matches the tool's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Kiểm tra' / check) and resource (pyRevit and Revit sessions running the agent host), so the agent knows this is a connectivity/environment probe. It is clearly distinguishable from all sibling tools, which are data-query and parameter-setting operations, though it never names a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Gọi đầu tiên' (call first) gives explicit, actionable sequencing guidance — this is a prerequisite probe before invoking the statistics/volume tools. It provides clear when-to-use context but no when-not or alternative routing, since no sibling overlaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kiem_tra_tham_soBRead-onlyIdempotent
Tìm phần tử của một hạng mục chưa có hoặc để trống một tham số.
hang_muc: tên BuiltInCategory (OST_Doors) hoặc tên quen dùng (cua, tuong, phong, cot, dam...). tham_so: tên tham số đúng như trong Revit, ví dụ "Mark" hoặc "Comments".
| Name | Required | Description | Default |
|---|---|---|---|
| revit | No | ||
| tham_so | Yes | ||
| hang_muc | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful semantics by defining what counts as a hit ('chưa có hoặc để trống' – absent or left blank), which goes slightly beyond the annotations. It says nothing about scope limits, scan cost, or return volume.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded, followed by a compact per-parameter gloss with concrete examples. Nothing is padded or repeated. The trailing blank line is trivial noise but the structure is efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers the purpose and both required inputs in enough detail to call the tool correctly, and annotations cover the safety profile. The only real gap is the undocumented optional 'revit' parameter and the absence of usage guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it does explain the two required parameters well: hang_muc accepts either a BuiltInCategory name (OST_Doors) or a Vietnamese colloquial name (cua, tuong, phong), and tham_so must be the exact Revit parameter name (e.g. 'Mark', 'Comments'). The third parameter 'revit' is left entirely undocumented in both schema and description, which prevents a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation on a specific resource: finding elements of a category that lack or have an empty parameter. This is clearly distinct from siblings like dat_tham_so (setting a parameter) or dem_theo_hang_muc (counting), though it never names those siblings explicitly. Only the lack of explicit sibling routing keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the many sibling audit/statistics tools (dat_tham_so, kiem_tra_ket_noi, thong_ke_phong). The agent must infer the use case from the purpose sentence alone. No preconditions, exclusions, or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
thong_ke_cuaARead-onlyIdempotent
Thống kê cửa đi, cửa sổ theo family, loại, kích thước (mm) và tầng.
chi_tiet=True trả thêm từng cửa (id, tầng, cao bệ, ký hiệu).
| Name | Required | Description | Default |
|---|---|---|---|
| revit | No | ||
| chi_tiet | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and closed-world, so the safety profile is covered. The description adds one behavioral trait beyond that: chi_tiet=True switches the output to per-door rows and names the extra fields (id, tầng, cao bệ, ký hiệu). It says nothing about ordering, performance, or scope limits, so it is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines with zero filler: the grouping dimensions come first, and the detail-mode behavior follows immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema and full annotations exist, so return format and safety need not be restated. However, with a 0%-covered schema, the unexplained revit parameter is a real gap that an agent must guess at before invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden. It explains chi_tiet well, including the exact fields returned in detail mode, but the revit parameter is never mentioned at all, leaving half the inputs undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: statistics of doors/windows grouped by family, type, size in mm, and floor. This clearly distinguishes it from thong_ke_phong (rooms) and the khoi_luong_* volume siblings, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the resource scope (use it when you need door/window counts by family/type/size/floor), but there is no explicit when-to-use/when-not-to-use statement nor any reference to the sibling statistics tools that could produce overlapping results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
thong_ke_phongBRead-onlyIdempotent
Danh sách phòng: số, tên, tầng, diện tích (m2), chu vi (m); tổng theo tầng; phòng lỗi.
| Name | Required | Description | Default |
|---|---|---|---|
| revit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description adds the result shape (per-floor aggregation and an 'error rooms' bucket), which is useful behavioral context, but it does not cover the optional 'revit' parameter's effect or any filtering scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single semicolon-delimited line that front-loads the entity being listed and then the fields and aggregations. Nothing is padded, though the terse telegraphed style leaves little room for the routing information an agent actually needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description is not obliged to spell out return values, and its enumeration of fields is a reasonable complement. The remaining gaps — what 'revit' does and how this tool differs from its many statistics siblings — are what keep it at merely adequate for a read-only reporting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter 'revit' is never mentioned in the description, so an agent has no explanation of what it selects (model connection? project file?). With one undocumented parameter and no compensating text, this falls below the baseline-3 case that applies when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete domain resource and enumerates what the result contains: room number, name, floor, area (m2), perimeter (m), plus per-floor totals and error rooms. It is a specific 'what it produces' statement rather than a tautology. It does not, however, differentiate itself from siblings like thong_ke_cua or khoi_luong_tuong, which are similarly shaped statistics tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this tool, when not to, or which sibling to prefer for a different breakdown. The presence of near-identical siblings (thong_ke_cua, dem_theo_hang_muc) makes this omission costly, since nothing in the text tells an agent which statistics tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
thong_tin_du_anDRead-onlyIdempotent
Tên mô hình, phiên bản Revit, danh sách tầng (cao độ m), view đang mở, phase.
| Name | Required | Description | Default |
|---|---|---|---|
| revit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered elsewhere. The description's only content is a list of returned data, which is redundant given an output schema exists, so it adds no behavioral context of its own.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short with no wasted words and front-loads the returned fields, but as a verbless fragment it is not a structured tool definition and reads like a schema dump rather than a purpose statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, the description did not need to enumerate return values — yet that is all it does. With one undocumented parameter and no purpose or usage statement, an agent cannot confidently decide to invoke this tool over its siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter "revit" has 0% schema description coverage, so the description carries the full burden of explaining it. It never references the parameter at all ("phiên bản Revit" is a returned field, not the argument), leaving its format and filtering role entirely opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun-phrase list of data fields ("Tên mô hình, phiên bản Revit, danh sách tầng...") rather than a statement of what the tool does; there is no verb or action. It only restates the scope implied by the name thong_tin_du_an and never distinguishes itself from siblings such as kiem_tra_ket_noi or thong_ke_phong.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this tool, no prerequisites, and no mention of any alternative among the ten sibling tools. An agent receives zero routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xuat_excel_khoi_luongA
Xuất bảng khối lượng (tường, sàn, kết cấu, cửa, phòng) ra file Excel.
thu_muc: thư mục tuyệt đối để lưu; bỏ trống thì lưu vào Documents\vn-revit-mcp. File đánh số NN_ và không bao giờ ghi đè. Hao hụt và mã hiệu để trống cho kỹ sư điền. Chỉ đọc mô hình, không sửa gì trong Revit.
| Name | Required | Description | Default |
|---|---|---|---|
| revit | No | ||
| thu_muc | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are present, so the bar is lower, yet the description still adds real behavioral value: files are numbered NN_, never overwritten, and 'Hao hụt và mã hiệu để trống cho kỹ sư điền'. It also scopes the write behavior — it reads the Revit model and writes a file, explaining why readOnlyHint is false despite 'chỉ đọc mô hình'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, followed by short, information-dense lines. No filler; each sentence carries a distinct fact (destination, naming, non-overwrite, read-only scope).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the write/destination behavior is well covered. The only meaningful gap is the undocumented 'revit' parameter and the absence of when-to-use routing against the sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry both parameters, but only 'thu_muc' is explained (absolute path, blank defaults to Documents\vn-revit-mcp). The 'revit' parameter is left completely undefined in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Xuất bảng khối lượng ... ra file Excel' — and enumerates the covered categories (tường, sàn, kết cấu, cửa, phòng). The 'ra file Excel' output distinguishes it implicitly from the computation-only siblings (khoi_luong_tuong, thong_ke_cua, etc.), but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides operational context (default save location, NN_ numbering, no overwrite) but never states when to choose this tool over the many quantity/statistics siblings. Usage is implied by the export framing rather than explicitly scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.2.0- First observed
dat_tham_so - First observed
dem_theo_hang_muc - First observed
khoi_luong_ket_cau - First observed
khoi_luong_san - First observed
khoi_luong_tuong - First observed
kiem_tra_ket_noi - First observed
kiem_tra_tham_so - First observed
thong_ke_cua - First observed
thong_ke_phong - First observed
thong_tin_du_an - First observed
xuat_excel_khoi_luong
TDQS
Scored across 11 tools
Tools target distinct Revit data types and operations: connection check, project info, room statistics, category counts, specific quantity takeoffs (structure, walls, floors, doors), parameter auditing/editing, and Excel export. Minor overlap exists between generic category counting (dem_theo_hang_muc) and specialized quantity tools, but descriptions clarify the intended scope.
All tool names use Vietnamese snake_case with no camelCase or mixed casing. Most follow an action_object pattern (kiem_tra_ket_noi, thong_ke_phong, dat_tham_so), though a few are noun-first (thong_tin_du_an, khoi_luong_tuong), a minor deviation that remains readable and predictable.
The server has 11 tools, which is well within the ideal 3-15 range for a Revit quantity-takeoff and parameter-management assistant. Each tool covers a distinct task and none appears redundant or trivial.
The surface covers connection check, project metadata, room/area stats, quantity extraction for major building elements, parameter auditing, parameter editing, and Excel export, which is comprehensive for a takeoff workflow. Minor gaps exist, such as no generic tool to read parameter values or list available parameters for a category.
Maintenance
Related MCP Connectors
Revit MCP: lets AI read and edit your open model. Windows, best supported on Revit 2021+, free beta.
Read and edit the Revit 2024–2027 model on your PC. Needs the free Revit MCP add-in.
Convert Revit files to XKT, IFC, or DWG and query BIM data via natural language.
Related MCP Servers
- AlicenseAqualityFmaintenanceAllows AI to interact with Autodesk Revit via the MCP protocol, enabling retrieval of project data and automation of tasks like creating, modifying, and deleting elements.1354 npm472MIT
- AlicenseBqualityNot gradedmaintenanceEnables seamless communication between Claude AI and Autodesk Revit, allowing users to access and interact with Revit model information through natural language.618-
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Autodesk Revit to query project data, manage elements, and execute generated code via the Model Context Protocol. It provides full compatibility with GitHub Copilot and Claude to automate BIM modeling workflows.1354 npmMIT
- AlicenseBqualityCmaintenanceMCP server for Autodesk Revit via pyRevit, providing 45 tools for building design, editing, analysis, MEP, interop, and documentation. Works with any MCP client.4534MIT