Skip to main content
Glama
andyluu98

vn-revit-mcp

by andyluu98

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 ve-revit trong repo này

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

  1. Cách hoạt động

  2. Yêu cầu

  3. Cài đặt

  4. Vẽ trên Revit bằng Claude

  5. Thống kê và khối lượng

  6. An toàn và dữ liệu

  7. Xử lý lỗi

  8. Gỡ cài đặt

  9. Phát triển

  10. Liên quan đến pyRevit và nguồn tham khảo


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 --version

Bước 2. Bật agent host và đặt chế độ hỏi trước khi sửa:

pyrevit configs agent enable
pyrevit configs agent policy ask

Chế độ

Nghĩa

readonly

Chỉ đọc, chạy thử. Không sửa được mô hình

ask (nên dùng)

Mỗi lần sửa, Revit hiện hộp Keep / Discard để bạn quyết

auto

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 claude

Dù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-mcp

Trê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-workspace

Lệnh này chép skill vào:

Nơi

Ai đọc

%USERPROFILE%\.claude\skills\ve-revit

Claude Code

%APPDATA%\pyRevit\agent\skills\ve-revit

Công cụ get_skill của MCP pyRevit

Thư mục --workspace (tùy chọn)

Dữ liệu mặt bằng mẫu nha_pho_mau.py và hàm đổi đơn vị vn_don_vi.py

Đã 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 enable

Bướ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 600000

Bướ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 list

Thấ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 đầu

Thứ 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 để

get_context

Không

Bản Revit, mô hình, view, chọn, tầng, chế độ policy, engine Python

get_skill, list_skills

Không

Đọc skill hướng dẫn (có ve-revit sau bước 5, 6)

inspect_elements

Không

Xem tham số, vị trí của tối đa 50 phần tử

lookup_revit_api

Không

Tra tên hàm, lớp Revit API ngay trong Revit đang chạy

run_query

Không bao giờ

Chạy script chỉ đọc; thay đổi luôn bị hoàn tác

run_modify

Sau khi bạn bấm Keep

Chạy script sửa mô hình; dry_run=true để xem trước

capture_view

Không

Chụp ảnh view, 3D để Claude tự xem kết quả

show_elements

Không

Chọn, zoom, cô lập tạm phần tử trong view

get_run

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?

kiem_tra_ket_noi

Kiểm tra pyRevit và các phiên Revit đang chạy

Không

thong_tin_du_an

Tên mô hình, bản Revit, các tầng và cao độ (m), view đang mở

Không

dem_theo_hang_muc

Đếm phần tử theo từng hạng mục

Không

thong_ke_cua

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

thong_ke_phong

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

khoi_luong_tuong

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

khoi_luong_san

Sàn theo loại và tầng: diện tích (m²), thể tích (m³), độ dày

Không

khoi_luong_ket_cau

Thể tích (m³) cột, dầm, móng theo vật liệu

Không

kiem_tra_tham_so

Phần tử chưa có hoặc để trống một tham số (ví dụ cửa thiếu Mark)

Không

xuat_excel_khoi_luong

Xuất Excel: bảng khối lượng và các sheet chi tiết

Không (chỉ ghi file Excel)

dat_tham_so

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-mcp nếu không chọn. Tên 01_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; sheet Nguon ghi 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ọi pyrevit.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 pyrevit nó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ý

cli_not_found

Không thấy lệnh pyrevit

Cài pyRevit 7, mở PowerShell mới; hoặc đặt biến VN_REVIT_MCP_PYREVIT trỏ tới pyrevit.exe

no_instance

Không có Revit nào bật agent host

pyrevit configs agent enable, khởi động lại Revit, mở mô hình

revit_busy

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

no_active_document

Chưa mở mô hình

Mở một mô hình trong Revit

policy_readonly

pyRevit đang chỉ đọc

pyrevit configs agent policy ask

approval_timeout

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 MCP_TOOL_TIMEOUT (bước 7)

ambiguous_revit

Đang mở nhiều Revit

Ghi rõ năm Revit trong câu hỏi, hoặc đặt biến VN_REVIT_MCP_REVIT=2025

revit_failure

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 kiem_tra()

transaction_left_open

Đ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

timeout, cli_timeout

Chạy quá lâu

Chia nhỏ chặng, kiểm tra Revit có treo không

dau_vao_khong_hop_le

Tham số truyền vào vn-revit-mcp sai

Xem thong_bao

Claude không thấy skill ve-revit

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 disable

Skill 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 pytest

Thư mục

Nội dung

src/vn_revit_mcp/server.py

MCP server và 11 công cụ

src/vn_revit_mcp/revit_scripts/

Script chạy trong Revit: chỉ cú pháp IronPython 2.7, chỉ ký tự ASCII

src/vn_revit_mcp/skills/ve-revit/

Skill dựng mô hình và workspace mẫu

src/vn_revit_mcp/cai_skill.py

Lệnh vn-revit-mcp cai-skill

tests/fake_pyrevit.py

Lệnh pyrevit giả trả JSON đúng dạng pyRevit 7, để kiểm thử không cần Revit

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.md trong repo pyrevitlabs/pyRevit

  • Skill gốc dựng mô hình: pyrevitlib/pyrevit/agent/skills/modeling/SKILL.md

  • Hàm dựng create_wall, create_floor, create_room, place_hosted_instance: pyrevitlib/pyrevit/revit/db/create.py

  • Lệnh pyrevit agent run và dạng JSON trả về: dev/pyRevitLabs/pyRevitCLI/PyRevitCLIAgentCmds.cs, dev/pyRevitLabs.PyRevit.Runtime/Agent/AgentRunService.cs

  • pyRevit Releases

Available Tools

11 tools
dat_tham_soA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
revitNo
gia_triYes
tham_soYes
chay_thuNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_mucC
Read-onlyIdempotent

Đếm số phần tử mô hình theo từng hạng mục (category).

ParametersJSON Schema
NameRequiredDescriptionDefault
revitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_cauB
Read-onlyIdempotent

Thể tích (m3) cột, dầm, móng kết cấu theo vật liệu và loại.

ParametersJSON Schema
NameRequiredDescriptionDefault
revitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_sanB
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
revitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_tuongB
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
revitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_noiA
Read-onlyIdempotent

Kiểm tra pyRevit và các phiên Revit đang chạy agent host. Gọi đầu tiên.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_soB
Read-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".

ParametersJSON Schema
NameRequiredDescriptionDefault
revitNo
tham_soYes
hang_mucYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_cuaA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
revitNo
chi_tietNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_phongB
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
revitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_anD
Read-onlyIdempotent

Tên mô hình, phiên bản Revit, danh sách tầng (cao độ m), view đang mở, phase.

ParametersJSON Schema
NameRequiredDescriptionDefault
revitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose2/5

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.

Usage Guidelines1/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
revitNo
thu_mucNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 11 tool updatesv0.2.0
    • First observeddat_tham_so
    • First observeddem_theo_hang_muc
    • First observedkhoi_luong_ket_cau
    • First observedkhoi_luong_san
    • First observedkhoi_luong_tuong
    • First observedkiem_tra_ket_noi
    • First observedkiem_tra_tham_so
    • First observedthong_ke_cua
    • First observedthong_ke_phong
    • First observedthong_tin_du_an
    • First observedxuat_excel_khoi_luong

TDQS

B3.1/5.0

Scored across 11 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    13
    54 npm
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    MCP server for Autodesk Revit via pyRevit, providing 45 tools for building design, editing, analysis, MEP, interop, and documentation. Works with any MCP client.
    45
    34
    MIT