Skip to main content
Glama
Meteor-Simulation

BULC MCP

Official

BULC MCP


한국어

무엇인가

BULC MCP 는 Model Context Protocol 서버입니다. Claude Desktop, Claude Code, Cursor, VS Code 같은 MCP 클라이언트의 AI 가 이 PC 에서 실행 중인 BULC 데스크톱 앱(FDS 6.10.1 기반 GPU 화재 시뮬레이터, 2D/3D 건물 편집기)을 자연어로 조작하게 합니다.

  • 앱의 모든 기능: 프로젝트 열기·저장, 도면 인식, 형상·Shape Studio, 격자, 해석 설정·사전 점검·실행·진행 확인, 출력, 화원, 재료, 감지기·제어, 스프링클러/물분무 배관망과 수리계산·펌프 사양·설계 검토, HVAC 덕트망, 피난 배치·실행·결과, 화재 결과 요약·ASET 판정, 결과 뷰어, 화면 캡처 — BULC 0.90 기준 앱 도구 239종을 그대로 노출합니다. 앱을 업데이트하면 새 도구가 이 서버를 다시 설치하지 않아도 따라옵니다.

  • 도면 기반 작업: 사용자가 PC 의 도면 파일(DWG, DXF, PDF, 이미지, ZIP 묶음, IFC) 경로를 알려 주면, 서버가 파일을 로컬에서 분류하고(bulc_drawing_intake) 맞는 작업 절차를 돌려줍니다. 건축 평면도는 앱이 벽·문·창·기둥·실명을 인식해 건물을 만들고(arch_analyze_drawing → arch_import_building), 스프링클러·물분무 배관 도면은 배관망을 만듭니다(spr_analyze_drawing → spr_import_network).

  • 오류를 줄이는 지식 팩: 온톨로지(클래스 79개), 규칙 166개(조건 → 확인 → 고치는 법), 흔한 LLM 실수 38개, 단계별 플레이북 6편, 한·영·FDS·도구 용어집, FDS 6.10.1 키 참조를 MCP resources·prompts·도구로 제공합니다. 실행 전 계획 점검(bulc_plan_check)과 덱 점검(bulc_check_deck)이 들어 있습니다.

이 저장소에는 BULC 앱이나 해석 엔진의 소스가 없습니다. 서버는 앱이 127.0.0.1 에서 여는 브리지에 요청을 전달하는 얇은 클라이언트입니다.

분야별로 할 수 있는 일

분야

대표 도구

흐름

프로젝트

project_info, project_open, project_save, project_export_fds, project_undo, fds_apply_text, capture_view

연 프로젝트 읽기 → 편집 → 저장(덮어쓰기는 확인 뒤)

건축 도면 → 건물

arch_analyze_drawing, arch_import_building, arch_import_floorplan_report, add_wall·add_door·add_window

인식 → 질문 확인 → dryRun → 생성(되돌리기 1단계)

화재·연기 해석

set_mesh·auto_multimesh, add_fire, set_all_boundaries_open, output_add_tenability_slices, sim_preflight, sim_start, sim_status

격자 → 화원(사용자 지시) → 경계 → 출력 → 점검 → 확인 → 실행

결과·ASET

results_detect, fire_results_summary, fire_timeseries, fire_compute_aset, result_*

최대 HRR·감지 시각 → 출구별 ASET(1.8 m)

피난·RSET

evac_add_agents_batch, evac_add_stair, evac_add_journey, evac_run, evac_status, evac_get_results

배치 → 계단·경로 → 실행 → 출구별 통계·RSET

HVAC 제연

hvac_add_node, hvac_add_duct, hvac_add_exhaust_grille, hvac_run_calc, hvac_apply_to_fds

덕트망 → 풍량 계산 → FDS 반영

스프링클러·물분무

spr_analyze_drawing, spr_import_network, spr_auto_layout, spr_run_calc, spr_pump_sizing, spr_design_review, spr_apply_to_fds, spr_export_results

도면 인식·자동 배치 → 수리계산 → 펌프·검토 → FDS 작동 해석·계산서

앱 버전에 따라 도구 집합이 다릅니다. 0.88 이하 앱에는 project_*·sim_*·fire_*·evac_run·arch_*·capture_view 가 없고, 지식 팩의 규칙이 그때의 대안(앱 파일 메뉴, run_simulation, 수동 벽 입력)을 알려 줍니다.

동작 방식

MCP 클라이언트 ──stdio──▶ bulc-mcp (이 저장소)
 (Claude 등)               ├─ 로컬 도구: 연결 상태 · 지식 검색 · 규칙 · 계획 점검 · 도면 분류 · 덱 점검 · 격자 조언
                           ├─ resources: bulc://knowledge/… (온톨로지·규칙·플레이북·용어집·FDS 키)
                           ├─ prompts: 작업 절차 8종
                           └─ 앱 도구 ──HTTP 127.0.0.1──▶ BULC 데스크톱 앱 (2D/3D 편집기 · 도면 인식 · 덱 생성 · GPU/CPU 솔버)
  • 앱이 켜져 있으면 앱의 도구 목록을 그대로 쓰고, 꺼져 있으면 내장 스냅샷(이름·설명·입력 스키마만)으로 목록을 채웁니다. 앱이 나중에 켜지거나 도구 집합이 바뀌면 tools/list_changed 알림을 보냅니다.

  • 앱이 돌려준 그림(capture_view)은 이미지로, 구조화 결과(sim_preflight, fire_compute_aset 등)는 structuredContent 로 전달합니다.

  • 앱이 HTTP 200 으로 돌려주는 오류 문구(Tool input error, Unknown tool 등)는 오류(isError)로 표시하고 관련 규칙을 덧붙입니다.

  • 브리지 포트에서 BULC 가 아닌 프로그램이 응답하면 알아채고 알려 줍니다. 루프백(127.0.0.1) 밖의 주소에는 연결하지 않습니다.

요구 사항

  1. BULC 데스크톱 앱(라이선스 필요), 실행 중이어야 합니다. 0.90 이상을 권합니다(0.88 은 줄어든 도구 집합으로 동작). 설치 파일: Meteor-Simulation/bulc-releases. 브리지는 기본으로 켜져 있습니다(앱 환경 변수 BULC_BRIDGE=0 이면 꺼짐).

  2. Node.js 20 이상

  3. MCP 클라이언트(Claude Desktop, Claude Code, Cursor, VS Code 등)

설치

Claude Desktop — 설정 파일(Windows %APPDATA%\Claude\claude_desktop_config.json, macOS ~/Library/Application Support/Claude/claude_desktop_config.json)에 추가합니다.

{
  "mcpServers": {
    "bulc": {
      "command": "npx",
      "args": ["-y", "github:Meteor-Simulation/bulc-mcp"]
    }
  }
}

Windows 에서 npx 를 찾지 못하면 "command": "cmd", "args": ["/c", "npx", "-y", "github:Meteor-Simulation/bulc-mcp"] 로 바꿉니다.

Claude Code

claude mcp add bulc --scope user -- npx -y github:Meteor-Simulation/bulc-mcp

Cursor (~/.cursor/mcp.json) — 도구 수 상한이 있는 클라이언트는 compact 프로필을 권합니다.

{ "mcpServers": { "bulc": { "command": "npx", "args": ["-y", "github:Meteor-Simulation/bulc-mcp"], "env": { "BULC_MCP_PROFILE": "compact" } } } }

VS Code (.vscode/mcp.json)

{ "servers": { "bulc": { "type": "stdio", "command": "npx", "args": ["-y", "github:Meteor-Simulation/bulc-mcp"] } } }

소스에서

git clone https://github.com/Meteor-Simulation/bulc-mcp.git
cd bulc-mcp
npm install        # prepare 단계에서 빌드합니다
node build/server.js

클라이언트 설정의 command 는 node, args 는 ["<저장소 경로>/build/server.js"] 로 둡니다.

앱 찾기(브리지 주소와 토큰)

설정 없이 동작합니다. BULC 앱(0.90 이상)은 브리지를 열 때 사용자 설정 폴더에 발견 파일 BULC/bridge.json(Windows %APPDATA%\BULC\bridge.json)을 쓰고, 이 서버가 그 파일에서 주소·포트·토큰을 읽습니다. 앱이 8787 이 아닌 포트에서 돌아도(다른 프로그램이 8787 을 쓰는 경우) 그대로 찾습니다. 종료된 앱이 남긴 파일은 무시합니다.

  • 순서: BULC_BRIDGE_URL → 발견 파일 → BULC_BRIDGE_HOST/BULC_BRIDGE_PORT(기본 127.0.0.1:8787).

  • 앱을 BULC_BRIDGE_AUTH=sensitive|all 로 실행하면 파일·실행 도구(또는 전부)에 토큰이 필요합니다. 서버는 발견 파일의 토큰을 그 주소에만 Authorization: Bearer 로 보냅니다. 발견 파일을 읽을 수 없는 환경에서는 BULC_BRIDGE_TOKEN 을 씁니다.

  • 발견 파일을 쓰지 않는 구버전 앱이 다른 포트에서 돌면 BULC_BRIDGE_URL(예: http://127.0.0.1:8790)을 지정합니다. bulc_connection_status 가 연결 여부, 주소를 찾은 경로, "BULC 가 아닌 프로그램이 응답함", 앱과 내장 스냅샷의 도구 집합 차이를 알려 줍니다.

환경 변수

변수

기본값

설명

BULC_BRIDGE_URL

—

브리지 전체 주소(가장 우선), 예: http://127.0.0.1:8790

BULC_BRIDGE_DISCOVERY_FILE

앱과 같은 위치

발견 파일 경로를 바꿈. 0 이면 읽지 않음

BULC_BRIDGE_TOKEN

—

브리지 토큰(발견 파일 없이 BULC_BRIDGE_AUTH 앱에 연결할 때)

BULC_BRIDGE_PORT / BULC_BRIDGE_HOST

8787 / 127.0.0.1

발견 파일이 없을 때 쓰는 주소

BULC_MCP_PROFILE

full

compact: 로컬 도구 + bulc_find_tools·bulc_call 만 노출(도구 수 상한이 있는 클라이언트용)

BULC_MCP_TOOLSETS

—

full 에서 노출할 앱 도구 분류(쉼표): project, arch, geometry, fire, ventilation, device, mesh, material, surface, output, query, evac, spr, hvac, draw, furniture, result, shape

BULC_MCP_HIDE_TOOLS

—

숨길 도구(쉼표), 예: project_new,sim_stop

BULC_MCP_HINTS

1

0 이면 도구 설명 끝의 규칙 id 힌트를 붙이지 않음(힌트는 설명을 1,024자 넘게 늘리지 않음)

BULC_MCP_MAX_DESCRIPTION

—

도구 설명 길이 상한(문자 수). 1,024자 제한이 있는 클라이언트는 1024

BULC_MCP_CALL_TIMEOUT_MS

120000

앱 도구 호출 시간 제한(도면 분석·결과 읽기·열기 등 일부는 5분 이상)

BULC_MCP_WATCH_MS

15000

앱 연결 감시 간격(0 이면 끔)

BULC_MCP_ATTACH_IMAGES

1

0 이면 capture_view·shape_screenshot 그림을 이미지로 첨부하지 않음

BULC_MCP_ALLOW_REMOTE

0

1 이면 루프백이 아닌 브리지 주소 허용(권장하지 않음)

도구

이 서버의 로컬 도구 — 앱 없이도 동작하는 것은 ○ 로 표시했습니다.

도구

앱 없이

하는 일

bulc_connection_status

○

브리지 주소와 찾은 경로, 연결 여부, BULC 식별, 도구 수, 스냅샷과의 차이

bulc_knowledge_search

○

규칙 id·클래스·FDS 키·오류 번호·자유 낱말(한/영)로 지식 팩 검색

bulc_get_rules

○

영역·심각도·클래스·도구별 규칙 목록

bulc_plan_check

○

호출하려는 도구 순서를 규칙으로 점검(없는 도구·인자, 단위, XB 순서, HRR, 화원 지시, 바닥 개방, 재계산 누락, 헤드·단말 label, 도면 가져오기 dryRun, 실행 전 점검·확인, 피난 실행 순서 등)

bulc_drawing_intake

○

도면 파일을 로컬에서 분류하고 플레이북·질문·도구 순서를 돌려줌. DXF 평면은 벽 중심선 후보 추출(구버전 앱용)

bulc_check_deck

○

FDS 6.10.1 덱 결정적 점검(파일·텍스트·앱의 현재 덱)

bulc_mesh_advisor

○

D* 와 셀 크기, 2·3·5 친화 IJK, 총 셀 수

bulc_find_tools

○

키워드로 앱 도구와 입력 스키마 찾기

bulc_call

(compact 프로필) 이름으로 앱 도구 호출

get_project_summary

앱 프로젝트 짧은 요약(0.90 이상은 project_info 가 더 자세함)

run_simulation

모든 앱 버전용 실행 가드 — validate_project 를 먼저 돌려 오류가 있으면 실행하지 않음(0.90 이상은 sim_preflight → sim_start 권장)

앱 도구(BULC 0.90 기준 239종): 프로젝트·실행·결과 24 · 건축 도면 3 · 형상 14 · 화재 6 · 경계 5 · 장치·제어 14 · 격자 21 · 재료 6 · 표면 8 · 출력 10 · 조회·점검 7 · 피난 16 · 스프링클러·물분무 32 · HVAC 20 · 층 7 · 가구 3 · 결과 뷰어 11 · Shape Studio 32. 도구마다 읽기 전용·파괴적·멱등 주석이 붙고, 실행 중인 앱에서만 동작하는 도구(열기·저장·실행·캡처 등)는 "Live app only" 로 표시됩니다.

지식 팩

종류

위치

온톨로지

bulc://knowledge/ontology (YAML), bulc://knowledge/ontology.jsonld, 클래스별 bulc://knowledge/class/{name}

규칙

bulc://knowledge/rules, 영역별 bulc://knowledge/rules/{domain}, 하나씩 bulc://knowledge/rule/{id}

플레이북

bulc://knowledge/playbooks/01-architectural-drawing-fire-aset … 06-troubleshooting

용어집

bulc://knowledge/glossary

FDS 6.10.1 키

bulc://knowledge/fds-6.10.1/keys, 그룹별 bulc://knowledge/fds-6.10.1/namelist/{group}

도구 카드

bulc://tools/{name} (설명·스키마·주석·관련 규칙)

라이브

bulc://project/summary, bulc://project/deck (앱 필요)

prompts

bulc-start, drawing-to-fire-aset, evacuation-rset, hvac-smoke-control, sprinkler-design, marine-water-spray-iso, troubleshooting, review-fds-deck

LLM 이 지식 팩을 쓰는 방식:

  1. 초기화 instructions — 연결하면 서버가 핵심 규칙 10개(단위, 읽고 쓰기, 도면, 화원 지시, 실행 전 점검·확인, 결과 보고)를 보냅니다.

  2. 도구 설명의 규칙 힌트 — 앱 도구마다 관련 규칙 id 가 붙어 있어([bulc-mcp rules] VENT-002 …) 모델이 bulc_knowledge_search "<id>" 로 원문을 찾습니다.

  3. 계획 점검 — 여러 단계 작업 전에 bulc_plan_check 가 도구 순서를 규칙으로 점검해 오류·경고와 따를 플레이북을 돌려줍니다(앱 없이 동작).

  4. 오류 응답의 안내 — 앱이 인자를 거절하거나 없는 도구를 부르면 결과에 규칙 id 와 실제 도구 이름을 덧붙입니다.

  5. prompts·resources — 작업별 prompt 가 플레이북 전문과 그 규칙을 한 번에 넣어 줍니다.

자세한 내용은 knowledge/README.md 를 보십시오.

도면으로 작업하기

  1. 도면을 PC 에 두고 절대 경로를 AI 에게 알려 줍니다(채팅 첨부 파일은 MCP 서버가 읽을 수 없습니다).

  2. AI 가 bulc_drawing_intake 로 분류하고, 단위·축척·기준점·층고·최종 출구를 묻습니다.

  3. 건축 평면도: arch_analyze_drawing 이 벽·문·창·기둥·실명·층 표기를 인식하고 확인할 질문을 냅니다 → arch_import_building 을 dryRun(기본)으로 개수·크기를 보여 주고 → 동의하면 건물을 만듭니다(되돌리기 1단계). 그림이나 글자가 윤곽선인 PDF 는 AI 가 그림을 읽어 arch_import_floorplan_report 로 넣습니다.

  4. 스프링클러 평면·배관 ISO: spr_analyze_drawing → 열린 끝·참조선·모호한 항목 확인 → spr_import_network(먼저 dryRun) → 수리계산·펌프·검토.

  5. 그 건물 위에서 화재(사용자가 정한 화원만), 피난, HVAC, 스프링클러 작업을 이어 갑니다. 실행은 sim_preflight → 조건 요약·확인 → sim_start 순서이고, 결과는 fire_results_summary·fire_compute_aset·evac_get_results 가 돌려준 값만 보고합니다.

합성 예제: examples/ (평면 DXF, 물분무 ISO DXF, FDS 덱, 예시 세션).

개인정보와 보안

  • 서버는 사용자 PC 에서만 실행되고 127.0.0.1 의 BULC 앱에만 연결합니다. 텔레메트리는 없습니다.

  • 서버가 직접 읽는 파일은 사용자가 지정한 도면·덱과 앱의 발견 파일뿐이며, 어디에도 올리지 않습니다. 브리지 토큰은 그 앱 주소에만 보냅니다.

  • 다만 도구 결과(도면 인식 요약, 화면 캡처 포함)는 대화의 일부로 사용자가 쓰는 AI 공급자에게 전달됩니다. 보안이 엄격한 도면은 로컬 LLM 을 쓰는 MCP 클라이언트를 검토하십시오.

  • 자세한 내용: PRIVACY_POLICY.md, SECURITY.md

문제 해결

증상

조치

"BULC 앱에 연결할 수 없습니다"

앱을 실행하고 bulc_connection_status 로 확인. 구버전 앱이 다른 포트에서 돌면 BULC_BRIDGE_URL 지정

"BULC 가 아닌 프로그램이 응답합니다"

다른 프로그램이 같은 포트를 씀 → 앱을 켜 두면 발견 파일로 찾음. 안 되면 앱을 빈 포트로 실행하고 BULC_BRIDGE_URL 지정

"브리지 토큰이 필요합니다"

앱이 BULC_BRIDGE_AUTH 로 실행됨 → 발견 파일을 읽을 수 있게 하거나 BULC_BRIDGE_TOKEN 설정

앱을 켰는데 도구 목록이 그대로

클라이언트가 tools/list_changed 를 지원하지 않으면 클라이언트를 다시 시작

Tool input error

앱이 인자를 검증한 결과입니다. 문구가 제안하는 인자 이름으로 다시 호출

project_*·sim_*·arch_* 가 없음

0.88 이하 앱입니다. 앱을 업데이트하거나 규칙의 대안(파일 메뉴, run_simulation, 수동 벽 입력)을 따름(GEN-014, GEN-016, DRW-004)

도구가 너무 많다는 오류

BULC_MCP_PROFILE=compact 또는 BULC_MCP_TOOLSETS 사용

라이선스

이 서버의 코드와 지식 팩은 MIT 입니다. BULC 데스크톱 앱과 해석 엔진은 별도의 상용 라이선스로 제공되며 이 저장소에 포함되지 않습니다. "BULC" 는 Meteor Simulation 의 상표이며, MIT 라이선스는 상표 사용권을 주지 않습니다. 인용한 외부 자료의 출처는 NOTICE.md 에 있습니다.


Related MCP server: ANSYS MCP Server

English

What it is

BULC MCP is a Model Context Protocol server. It lets the AI in an MCP client — Claude Desktop, Claude Code, Cursor, VS Code and others — drive the BULC desktop app running on the same PC (a GPU fire simulator built on FDS 6.10.1, with a 2D/3D building editor) in plain language.

  • Every app feature: opening and saving projects, drawing recognition, geometry, Shape Studio, meshing, run settings, pre-flight checks, runs and progress, outputs, fires, materials, detectors and controls, sprinkler / water-spray networks with hydraulics, pump sizing and design review, HVAC ducts, evacuation set-up, runs and results, fire result summaries and ASET, the result viewer and screenshots — 239 app tools as of BULC 0.90, taken live from the app so new app versions bring new tools without reinstalling this server.

  • Work from drawings: give the AI the local path of a DWG, DXF, PDF, image, ZIP bundle or IFC file. bulc_drawing_intake classifies it on your PC and returns the playbook. The app recognises architectural floor plans (walls, doors, windows, columns, room names) and builds the building (arch_analyze_drawing → arch_import_building), and turns sprinkler / water-spray piping drawings into pipe networks (spr_analyze_drawing → spr_import_network).

  • A knowledge pack that prevents mistakes: an ontology (79 classes), 166 rules (condition → check → fix), 38 common LLM mistakes, six playbooks, a Korean–English–FDS–tool glossary and an FDS 6.10.1 key reference, served as MCP resources, prompts and tools. Plans and decks are checked before acting (bulc_plan_check, bulc_check_deck).

This repository contains no BULC application or solver source. The server is a thin client of the bridge the app opens on 127.0.0.1.

What it can do, by domain

Domain

Key tools

Flow

Project

project_info, project_open, project_save, project_export_fds, project_undo, fds_apply_text, capture_view

read → edit → save (overwrite only after consent)

Drawing → building

arch_analyze_drawing, arch_import_building, arch_import_floorplan_report

recognise → confirm → dry run → build (one undo step)

Fire & smoke

set_mesh, add_fire, set_all_boundaries_open, output_add_tenability_slices, sim_preflight, sim_start, sim_status

mesh → fire (user-given) → boundaries → outputs → check → consent → run

Results & ASET

results_detect, fire_results_summary, fire_timeseries, fire_compute_aset

peak HRR, detector times → ASET per exit at 1.8 m

Evacuation & RSET

evac_add_agents_batch, evac_add_stair, evac_run, evac_status, evac_get_results

place → stairs/routes → run → per-exit statistics, RSET

HVAC smoke control

hvac_add_node, hvac_add_duct, hvac_run_calc, hvac_apply_to_fds

network → airflow → FDS

Sprinkler & water spray

spr_analyze_drawing, spr_import_network, spr_run_calc, spr_pump_sizing, spr_design_review, spr_apply_to_fds

recognise / lay out → hydraulics → pump & review → FDS activation

BULC 0.88 and older lack project_*, sim_*, fire_*, evac_run, arch_* and capture_view; the rules describe the fallbacks.

Requirements

  1. The BULC desktop app (licensed), running — 0.90 or later recommended (0.88 works with the smaller tool set). Installer: Meteor-Simulation/bulc-releases. The bridge is on by default (BULC_BRIDGE=0 in the app's environment turns it off).

  2. Node.js 20+

  3. An MCP client.

Install

Claude Desktop (claude_desktop_config.json):

{ "mcpServers": { "bulc": { "command": "npx", "args": ["-y", "github:Meteor-Simulation/bulc-mcp"] } } }

Claude Code: claude mcp add bulc --scope user -- npx -y github:Meteor-Simulation/bulc-mcp

Cursor / VS Code: same command; clients with a tool-count limit should set BULC_MCP_PROFILE=compact. From source: git clone, npm install (builds in prepare), then run node build/server.js.

Finding the app

No configuration is needed. When BULC (0.90+) opens its bridge it writes a discovery file BULC/bridge.json in the user's config folder (%APPDATA%\BULC\bridge.json on Windows); this server reads the address, port and token from it — also when the app runs on a port other than 8787. Files left behind by an app that has ended are ignored. Order: BULC_BRIDGE_URL → discovery file → BULC_BRIDGE_HOST/BULC_BRIDGE_PORT (default 127.0.0.1:8787). With BULC_BRIDGE_AUTH=sensitive|all in the app, the token from the discovery file is sent as Authorization: Bearer to that address only; BULC_BRIDGE_TOKEN covers set-ups without the file. All environment variables are listed in the Korean section above.

Tools, knowledge and prompts

  • Local tools: bulc_connection_status, bulc_knowledge_search, bulc_get_rules, bulc_plan_check, bulc_drawing_intake, bulc_check_deck, bulc_mesh_advisor, bulc_find_tools (all work without the app), bulc_call (compact profile), get_project_summary, run_simulation (guarded run for any app version).

  • App tools carry read-only / destructive / idempotent annotations, "Live app only" marks, side-effect notes and, by default, a short list of related rule ids — never pushing a description past 1,024 characters.

  • App pictures (capture_view) arrive as image content and structured results as structuredContent.

  • Resources: bulc://knowledge/{index, ontology, ontology.jsonld, rules, glossary, fds-6.10.1/keys}, playbooks, templates bulc://knowledge/rule/{id}, …/rules/{domain}, …/class/{name}, …/fds-6.10.1/namelist/{group}, bulc://tools/{name}, live bulc://project/summary and bulc://project/deck, and the synthetic bulc://examples/….

  • Prompts: bulc-start, drawing-to-fire-aset, evacuation-rset, hvac-smoke-control, sprinkler-design, marine-water-spray-iso, troubleshooting, review-fds-deck.

Example session (synthetic)

user: Build a fire model from D:\work\office-plan-synthetic.dxf — ground floor, 3 m storey, exit on the south side.
→ bulc_connection_status · project_info · bulc_drawing_intake {"path": "D:\\work\\office-plan-synthetic.dxf", "purpose": "fire"}
→ arch_analyze_drawing {"filePath": "D:\\work\\office-plan-synthetic.dxf"} → mm, 5 walls, 2 doors, 1 window + questions
assistant: confirms units, origin, which door is the final exit and the fire scenario (no fire until the user gives one — GEN-015)
→ arch_import_building {"candidateId": "…", "story": 1} (dry run) → user agrees → … "dryRun": false
→ bulc_plan_check {...} → set_mesh · set_all_boundaries_open · add_fire · output_add_tenability_slices · set_time
→ sim_preflight → summary → user confirms → project_save → sim_start {"confirm": true} → sim_status … → fire_compute_aset

More in examples/sessions.

Privacy and security

The server runs on your PC and talks only to the BULC app on 127.0.0.1; no telemetry. It reads only the files you point it to and the app's discovery file, and uploads nothing; the bridge token is sent only to that app. Tool results (including drawing summaries and screenshots) become part of your conversation with the AI provider you use — consider an MCP client with a local model for confidential drawings. See PRIVACY_POLICY.md and SECURITY.md.

Development

npm install
npm run check          # typecheck, build, tests, knowledge lint, public-content scan, licence check, package contents
npm run gen:examples   # regenerate the synthetic DXF examples
node scripts/import-snapshot.mjs <export.json> --app-version X.Y.Z   # refresh the bundled tool snapshot

License

The server code and the knowledge pack are MIT. The BULC desktop app and its solvers are commercial software under a separate licence and are not part of this repository. "BULC" is a trademark of Meteor Simulation; the MIT licence grants no trademark rights. Sources cited by the knowledge pack are listed in NOTICE.md.

Available Tools

249 tools
add_bndfAdd bndfA

Add an animated boundary quantity (&BNDF) such as WALL TEMPERATURE or ADIABATIC SURFACE TEMPERATURE. Use spec_id for species quantities (MASS FLUX, SURFACE DEPOSITION, MPUA_Z, CPUA_Z, AMPUA_Z) and part_id for particle quantities (MPUA, CPUA, AMPUA). The GPU engine records these 7 quantities: WALL TEMPERATURE, WALL HEAT FLUX, NET HEAT FLUX, RADIATIVE HEAT FLUX, CONVECTIVE HEAT FLUX, INCIDENT HEAT FLUX, BACK WALL TEMPERATURE. Any other quantity needs CPU FDS (the GPU engine warns and falls back to WALL HEAT FLUX). WALL HEAT FLUX is a GPU-engine-only name — use NET HEAT FLUX when the deck must also run on CPU FDS. [bulc-mcp rules] OUT-005 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
part_idNoParticle class ID, for particle-based quantities
spec_idNoSpecies ID, for species-based quantities
quantityYesFDS BNDF QUANTITY, uppercase (e.g. 'WALL TEMPERATURE')

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic mutation profile (readOnlyHint false, idempotentHint false, destructiveHint false). The description adds substantial behavior: the GPU engine's 7 supported quantities, the warn-and-fall-back-to-WALL-HEAT-FLUX behavior for unsupported quantities, and the WALL HEAT FLUX vs NET HEAT FLUX portability trap. That is exactly the kind of context annotations cannot carry.

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 core action and examples, then layers engine caveats in descending order of importance; every sentence carries operational weight. The trailing rule reference ('[bulc-mcp rules] OUT-005 — bulc_knowledge_search "<id>"') is cryptic filler that slightly blurs the end of an otherwise tight description.

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 3 params, no output schema and only generic annotations, the description covers the important unknowns: valid quantity names, engine compatibility, ID parameter mapping, and the CPU-vs-GPU naming hazard. It does not address what happens on duplicate additions (relevant given idempotentHint=false) or any confirmation/return behavior, leaving a small gap.

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 100%, so the baseline is 3, but the description adds real meaning beyond the terse schema text: it enumerates which quantities go with spec_id (MASS FLUX, SURFACE DEPOSITION, MPUA_Z, CPUA_Z, AMPUA_Z) versus part_id (MPUA, CPUA, AMPUA) and constrains quantity to uppercase FDS names.

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 ('Add') plus the exact resource ('animated boundary quantity (&BNDF)') with concrete examples (WALL TEMPERATURE, ADIABATIC SURFACE TEMPERATURE). An agent can immediately distinguish it from list_bndf and remove_bndf without opening a schema.

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?

Gives clear selection rules for the parameters: spec_id for species quantities (with the list of valid names) and part_id for particle quantities. It also states the engine-constraint condition ('Any other quantity needs CPU FDS'). It stops short of explicitly contrasting with sibling tools, but for a create-style tool the guidance present is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_controlAdd controlA

Add a CTRL control logic element. FUNCTION_TYPE: logic ANY/ALL/NOT/XOR/X_OF_N(N), TIME_DELAY(delay), KILL/RESTART, DEADBAND(setpoint+setpoint2+on_bound), CUSTOM(ramp_id), PID(target_value+gains), math ABS/EXP/LOG/SIN/COS/ASIN/ACOS/ATAN/SUM/SUBTRACT/MULTIPLY/DIVIDE/POWER/MIN/MAX (with setpoint+trip_direction they act as boolean gates). INPUT_ID accepts device IDs, other CTRL IDs, or CONSTANT. [bulc-mcp rules] DEVC-004, DEVC-006 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoX_OF_N / XOR threshold count
idYesControl ID
delayNoActivation delay (s)
latchNoAllow only one state change (FDS default true; CUSTOM/PID/DEADBAND default false)
ramp_idNoCUSTOM transfer-function RAMP id
constantNoValue used when an input is 'CONSTANT'
input_idYesInput device/control IDs (or CONSTANT)
on_boundNoDEADBAND hysteresis direction: 'LOWER' (default) or 'UPPER'
setpointNoGate threshold (DEADBAND: lower bound)
setpoint2NoDEADBAND upper bound
target_valueNoPID target
function_typeYesOne of the 25 FUNCTION_TYPEs above
initial_stateNoStart in true state
integral_gainNoPID Ki (default 0)
trip_directionNo+1 ascending (default) / -1 descending
differential_gainNoPID Kd (default 0)
proportional_gainNoPID Kp (default 1)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false) and the description is consistent with them, so no contradiction. The description adds useful semantic behavior (input_id may reference device IDs, other CTRL IDs, or CONSTANT; math functions with setpoint+trip_direction act as boolean gates), but says nothing about error handling for invalid function_type/parameter combinations, duplicate IDs, or required permissions.

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 action, then a compact catalogue of function types and input rules; for 25 function types and 17 parameters the density is justified and no sentence is filler. The one downside is that the run-on FUNCTION_TYPE enumeration is hard to parse and could be broken into lines, which keeps it just short of 5.

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?

For a 17-parameter, 25-variant creation tool with no output schema, the description covers the domain vocabulary well, and the absence of a return-value explanation is acceptable. However, it omits preconditions (must referenced devices/controls exist?), behavior on invalid combinations, and interaction with update_control, leaving real gaps for a tool of this complexity.

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 coverage is 100%, giving a baseline of 3, and the description genuinely adds cross-parameter semantics the schema does not: it maps each function type to the parameters it consumes (DEADBAND -> setpoint+setpoint2+on_bound, PID -> target_value+gains, CUSTOM -> ramp_id, TIME_DELAY -> delay, X_OF_N -> n). This tells an agent which of the 17 params matter for a chosen function_type, exceeding individual property descriptions.

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 and resource ("Add a CTRL control logic element") and then enumerates the complete space of FUNCTION_TYPE variants with their dependent parameters, so an agent knows exactly what object class is being created and which configurations are valid. This makes it unmistakable against siblings such as add_device, add_vent, update_control, and remove_control.

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: the bulc-mcp rules pointer (DEVC-004, DEVC-006 -> bulc_knowledge_search "<id>") hints that rules should be consulted, and the operation is obviously the creation counterpart to update_control/remove_control, but the description never explicitly says when to prefer this tool, what preconditions must hold, or when not to use it. No explicit exclusion or alternative-routing guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_deviceAdd deviceA

Add a measurement device (&DEVC) with full parameter support: point (xyz) or region (xb) quantities, species, statistics, trip options (setpoint/latch/initial_state/trip_direction), post-processing, aspiration, HVAC and particle quantities. Provide xyz for point quantities or xb for flow/HRR/layer/beam/statistics. [bulc-mcp rules] DEVC-001, DEVC-003, DEVC-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUnique device ID
xbNoRegion [x1,x2,y1,y2,z1,z2] — plane for flow, box for HRR/statistics, segment for beam, column for layer
iorNoWall direction for solid quantities: ±1(X) ±2(Y) ±3(Z)
xbpNoLine endpoints for points>1: [x1,x2,y1,y2,z1,z2]
xyzNoPoint position [x,y,z] (m)
delayNoAspiration transport delay (s)
depthNoDEPTH (m) for INSIDE WALL TEMPERATURE
latchNofalse → re-trips allowed (LATCH=.FALSE.; default true)
outputNofalse → omit column from devc.csv (control-only device)
pointsNo>1 → expand XBP line into N point devices (ID-01..)
ctrl_idNoCTRL reference (required for QUANTITY=CONTROL / CONTROL VALUE)
devc_idNoASPIRATION unit id (for sampling points)
duct_idNoHVAC duct id (DUCT quantities)
node_idNoHVAC node id(s) — 2 for NODE PRESSURE DIFFERENCE
part_idNoParticle class for MPUV/ADD/AMPUA etc.
prop_idNoPROP model reference (detector/sprinkler properties)
spec_idNoSpecies: OXYGEN, CARBON DIOXIDE, CARBON MONOXIDE, SOOT, WATER VAPOR, or fuel name
flowrateNoAspiration sampling flowrate (>0)
quantityYesFDS QUANTITY (e.g. TEMPERATURE, VOLUME FRACTION, MASS FLOW +, LAYER HEIGHT, PATH OBSCURATION, HRR, CONTROL)
relativeNoSubtract first output value
rotationNoRotation about orientation axis (deg)
setpointNoTrip threshold (device acts as trigger when crossed)
quantity2NoSecond quantity for COV/CORRCOEF
pipe_indexNoSprinkler pipe group (default 1)
orientationNoSensor direction vector (default 0,0,-1)
initial_stateNoStart in tripped state (INITIAL_STATE)
absolute_valueNoOutput |x|
quantity_rangeNoValue gate [min,max] for integral statistics
smoothing_timeNoSmoothing time constant (s, overrides factor)
trip_directionNo+1 ascending (default) / -1 descending crossing
bypass_flowrateNoAspiration unit bypass flowrate
smoothing_factorNoExponential smoothing 0..1
conversion_addendNoOutput = factor*x + addend (default 0)
conversion_factorNoOutput = factor*x + addend (default 1)
no_update_devc_idNoFreeze this output when the referenced device trips
spatial_statisticNoMEAN, MAX, MIN, VOLUME MEAN/INTEGRAL, MASS MEAN/INTEGRAL, AREA INTEGRAL, SUM, VOLUME, MASS (needs xb)
temporal_statisticNoTIME AVERAGE, RUNNING AVERAGE, MAX, MIN, MAX TIME, MIN TIME, TIME INTEGRAL, RMS, COV, CORRCOEF, SMOOTHED

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write/non-idempotent/non-destructive behavior, so the safety profile is covered. The description adds the DEVC-001/003/004 rule references pointing to bulc_knowledge_search, which hints at validation constraints — modest but real value. It does not state whether the call mutates existing devices, error behavior, or the non-idempotent nature beyond what annotations declare.

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 action and resource, followed by a compact enumeration of supported domains and one actionable geometry-selection rule. The trailing bulc rule-pointer is terse and useful. The opening sentence is dense but not redundant.

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?

For a 37-parameter creation tool with 100% schema coverage and no output schema, the description supplies the missing cross-cutting guidance (geometry parameter choice) and points to validation rules. Return values need not be explained without an output schema; remaining gaps (mutation semantics, error cases) are minor.

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 100%, so the schema documents all 37 parameters and the baseline is 3. The description goes beyond the schema by stating cross-parameter selection rules (xyz for point quantities vs xb for flow/HRR/layer/beam/statistics), which is genuinely useful guidance an agent could not derive from per-field descriptions alone.

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 ('Add') and resource ('measurement device (&DEVC)') and enumerates the domains it covers (point/region quantities, species, statistics, trip options, post-processing, aspiration, HVAC, particles). It is clearly a device-creation tool, but it does not differentiate itself from siblings such as add_heat_detector, add_smoke_detector, or add_thermocouple.

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?

'Provide xyz for point quantities or xb for flow/HRR/layer/beam/statistics' gives conditional guidance on which geometry parameter to supply. However, it offers no when-to-use guidance relative to the specialized sibling adders (detectors, thermocouples) and no exclusions or prerequisites, leaving tool selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_doorAdd doorA

Convenience tool: add a door opening in a wall. Specify the wall obstacle ID and door position/size. Creates a HOLE that cuts through the wall. [bulc-mcp rules] EVAC-002, GEO-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDoor (hole) identifier
widthNoDoor width in metres (default 0.9)
heightNoDoor height in metres (default 2.1)
wall_idYesID of the wall obstacle to cut
positionNoPosition along the wall as fraction 0-1 (default 0.5 = center)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already describe the safety profile (readOnly=false, destructive=false, idempotent=false), so the bar is lower. The description nonetheless adds a real behavioral trait: the tool creates a HOLE geometry that cuts through the wall, which is not derivable from the annotations, plus a pointer to rules EVAC-002/GEO-004.

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?

Two tight sentences front-load the purpose and mechanism, followed by a compact rules reference. Everything is relevant; the bracketed rule line is slightly cryptic but earns its place as a compliance pointer.

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?

For a 5-param mutating geometry tool with no output schema but full schema coverage and annotations, the description covers purpose, mechanism and params adequately. It still omits prerequisites (existing wall), the relationship to add_hole/add_window, and any note on reversibility.

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 coverage is 100%, so the schema already documents defaults for width, height and position. The description only restates 'wall obstacle ID and door position/size' at a high level, adding no syntax or range detail beyond the schema, which lands it at the baseline.

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 ('add a door opening in a wall') and the mechanism ('Creates a HOLE that cuts through the wall'), so an agent understands the effect. It stops short of naming the sibling it differs from (add_window, add_hole), so sibling differentiation is only implied.

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?

'Convenience tool' and 'Specify the wall obstacle ID and door position/size' hint at when to reach for it, and the rule reference signals a compliance step. But it never states when to prefer this over add_hole or add_window, nor any prerequisite (e.g. an existing wall), so guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_fireAdd fireA

Add a fire source. HRRPUA = Heat Release Rate Per Unit Area (kW/m²). XB defines location. For a time-varying fire, pass ramp_points (an explicit HRR fraction curve) OR growth (an NFPA t-squared growth curve) — both auto-create a RAMP and link it. [bulc-mcp rules] FIRE-001, FIRE-002, FIRE-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xbYesFire location [x1,x2,y1,y2,z1,z2]
growthNoNFPA t-squared fire growth preset. Auto-generates a RAMP rising as (t/t_peak)^2 to full HRRPUA.
hrrpuaYesPeak heat release rate per unit area (kW/m²)
ramp_idNoOptional explicit RAMP ID. If omitted and a curve is given, one is auto-generated.
tmp_frontNoFront temperature in K (default 300)
ramp_pointsNoTime-varying HRR curve as [[time_s, fraction], ...] where fraction is 0–1 of HRRPUA. Auto-creates a RAMP.
time_to_peakNoSeconds to reach full HRRPUA when using growth (defaults by preset: slow 600, medium 300, fast 150, ultrafast 75).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnly=false, destructive=false, idempotent=false). The description adds that both ramp_points and growth auto-create and link a RAMP, which is useful side-effect context beyond the annotations, but it does not cover failure modes, permission needs, or reversibility.

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 core action in the first sentence, then explains inputs compactly. The bracketed rules tag is a bit cryptic but functions as a compliance pointer; overall it is well-sized with little waste.

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?

For a mutation tool with annotations covering safety and a fully documented schema, the description supplies enough to call it correctly, including the two mutually exclusive curve paths and the RAMP side effect. No output schema exists, and none is implied as missing.

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 100%, so the schema already documents every parameter, including the RAMP auto-generation on growth and ramp_points. The description mostly restates it (HRRPUA, XB location, curve options), so the baseline 3 is appropriate.

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 ('Add a fire source') and immediately clarifies the domain meaning of the key inputs (HRRPUA, XB). It does not explicitly name sibling alternatives such as update_fire or remove_fire, so it falls short of full sibling differentiation.

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?

Gives conditional guidance for the time-varying case ('pass ramp_points OR growth') and points to the FIRE-001..003 rules via bulc_knowledge_search. However, it never states when to choose add_fire over update_fire/remove_fire, so tool-selection guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_floorAdd floorC

Convenience tool: add a floor slab. Specify x/y range and optional thickness. [bulc-mcp rules] GEN-003, GEO-007 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
zNoFloor top Z level (default 0)
idYesUnique floor identifier
x_maxYes
x_minYes
y_maxYes
y_minYes
surf_idsNo
thicknessNoFloor thickness (default 0.2)

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-idempotent, non-destructive, non-open-world mutation, so safety is covered. The description adds only that thickness is optional, plus a cryptic rule reference (GEN-003, GEO-007) whose behavior impact is unexplained; it does not say whether surf_ids are required for material assignment or what happens to overlapping slabs.

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?

The core sentence is tight and front-loaded, but the trailing "[bulc-mcp rules] GEN-003, GEO-007 — bulc_knowledge_search \"<id>\"" fragment is cryptic overhead that does not clearly help an agent invoke the tool.

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?

For an 8-parameter geometry-creation tool with no output schema and thin schema coverage, the description omits what is created from surf_ids, whether an id must be unique, and any project-state precondition. It is too sparse to fully guide a correct call.

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 coverage is only 38% (6 of 8 parameters undocumented). The description compensates for x_min/x_max/y_min/y_max and thickness, but leaves id, z, and especially surf_ids — likely the most consequential parameter — completely unexplained 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 ("add a floor slab") and names the two key inputs (x/y range, thickness), so it is distinguishable from generic siblings like shape_add_box or add_obstacle. It is not fully differentiated from those overlapping geometry-creation siblings, which keeps it out of 5 territory.

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?

Calling itself a "convenience tool" hints that an alternative exists but never names it (e.g., add_obstacle or shape_add_box) or states when this should be preferred over them. There is also no mention of prerequisites such as an open project or document.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_heat_detectorAdd heat detectorA

Convenience: add a heat detector as a small obstacle with FDS override. Generates DEVC+PROP in FDS output. [bulc-mcp rules] DEVC-001, DEVC-009 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position (m)
yYesY position (m)
zNoZ position (m, default ceiling height)
idYesDetector ID (e.g. HD_1)
rtiNoResponse Time Index (default 5)
activation_tempNoActivation temperature (°C, default 57)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare it is a non-read-only, non-destructive, non-idempotent write, and the description meaningfully adds *what* gets written — a small obstacle plus DEVC and PROP namelists in the FDS output — which is genuine behavioral context beyond the safety hints. It does not cover repeat-call effects or permissions, but for a local project mutation this is solid.

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?

Very short and front-loaded: the effect (convenience detector) precedes the FDS-emission detail, and the bulc rule pointer is compact. Every clause earns its place, though the rules line is somewhat cryptic without 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?

There is no output schema, and the description does not say what the call returns or how the created DEVC/PROP can be located afterward. Annotations carry the safety profile and the FDS-emission sentence covers the main side effect, leaving it adequate but not fully complete for a six-parameter mutation 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 100%, so the schema already documents all six parameters (x/y/z, id, rti, activation_temp) with units and defaults. The description adds no positional or value syntax beyond the schema, so baseline 3 is appropriate.

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 ('add a heat detector') and adds real scope detail — it is created as a small obstacle and emits DEVC+PROP in FDS output. This distinguishes it from the generic add_device sibling without requiring the schema to be opened, though it stops short of naming the alternatives.

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?

The word 'Convenience:' implies this is a shortcut over the generic add_device path, which gives an agent an implicit sense of when to reach for it. However, there is no explicit when/when-not guidance and no named alternative, so selection still requires inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_holeAdd holeB

Add a hole (opening in an obstacle) to the FDS model. XB defines the hole volume. [bulc-mcp rules] GEO-004, GEO-008 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUnique identifier
xbYesHole bounding box [x1,x2,y1,y2,z1,z2]

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the full safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the mutation/idempotency facts are covered. The description adds that XB defines the hole volume, but omits the key behavioral fact of how the hole attaches to a parent obstacle (which object 'id' refers to).

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?

Two short, front-loaded sentences that lead with the action and definition. The bracketed rule-reference footer is somewhat opaque but compact.

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?

For a simple 2-parameter additive tool with annotations covering the safety profile and 100% schema coverage, the core is present. However, the parent/child relationship implied by 'hole in an obstacle' and the meaning of 'id' are left unresolved, leaving a gap an agent must guess at.

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 100%, so both parameters are documented in the schema, including the XB format and 6-item constraint. The description's 'XB defines the hole volume' merely restates the schema, and it does not resolve whether 'id' is the hole's identifier or the owning obstacle's id.

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 ('Add a hole') and clarifies what a hole is ('opening in an obstacle') in the FDS model, which distinguishes it from siblings like add_obstacle, add_vent, and remove_hole. It stops short of explicitly contrasting with those siblings.

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?

No when-to-use guidance, no prerequisites, and no named alternatives among the many add_* siblings. The only routing hint is a cryptic '[bulc-mcp rules] GEO-004, GEO-008 — bulc_knowledge_search' pointer, which requires external lookup rather than explaining usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_materialAdd materialC

Add a material definition (MATL). [bulc-mcp rules] SURF-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMaterial ID
densityYesDensity (kg/m³)
emissivityNoEmissivity (0-1, default 0.9)
conductivityYesThermal conductivity (W/m·K)
specific_heatYesSpecific heat (kJ/kg·K)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose that this is a non-readonly, non-destructive, non-idempotent write, so the safety profile is covered. The description adds nothing beyond the purpose: it does not say what happens if the ID already exists (rejected vs overwritten), what validation applies, or what result is returned, all of which matter for a non-idempotent create.

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?

Very short and front-loaded: the purpose is in the first clause, before the bracketed metadata. The second sentence is terse but useful as a procedural pointer, so little is wasted, though the placeholder notation is opaque.

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?

For a 5-parameter create tool with no output schema, the definition plus full schema coverage and annotations is minimally sufficient to invoke it. It is nonetheless incomplete on duplicate-ID behavior, success/failure feedback, and the relationship to update_material/remove_material, which an agent would need in order to use it correctly in a workflow.

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 100% with units supplied inline (kg/m³, W/m·K, kJ/kg·K, emissivity range), so the schema carries the full burden. The description adds no additional parameter semantics, which is the expected baseline 3 when the schema is complete.

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 pairs a specific verb with a specific resource ('Add a material definition (MATL)') and names the FDS namelist it maps to, so an agent immediately knows this creates a material object. It does not, however, differentiate itself from siblings such as add_material_from_library, update_material, or remove_material, which an agent must infer from names alone.

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 only guidance is a cryptic bracketed rule reference ('SURF-001 — bulc_knowledge_search "<id>"'), whose placeholder is ambiguous and which never states when to use add_material versus add_material_from_library or update_material. No conditions, prerequisites, or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_material_from_libraryAdd material from libraryB

Copy a material preset from the built-in library into the model as a &MATL. [bulc-mcp rules] SURF-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoOptional new ID in the model (defaults to the library ID)
library_idYesLibrary material ID (see list_material_library)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation profile is covered. The description adds useful domain context (the result is an FDS &MATL namelist) beyond the annotations. However, it is silent on what happens when the copy is repeated (idempotentHint=false suggests duplicates may accumulate) and gives no reversibility or naming-conflict guidance.

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 efficient sentence front-loads the action and result, with no filler. The appended bracketed rules line is terse and slightly cryptic (a placeholder '<id>' with no explanation of when to consult it), which keeps it just short of a 5.

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?

There is no output schema, and the description says nothing about the return value or the created object's identity, nor about duplicate-ID behavior. For a simple two-parameter creation tool with complete schema coverage this is adequate but leaves the post-call state underspecified.

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 100%, so both parameters (id, library_id) are fully documented in the schema, including the defaulting behavior of id. The description adds no format or syntax detail beyond that. Baseline 3 is appropriate when the schema does the heavy lifting.

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: 'Copy a material preset from the built-in library into the model as a &MATL.' The 'from the built-in library' qualifier distinguishes it from the sibling add_material, which presumably creates a custom material. It is clear without opening the schema, though it does not name the sibling 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?

No statement of when to use this tool versus add_material or add_surface_from_library. The only routing hint is buried in the appended 'SURF-001 — bulc_knowledge_search' rules reference, which points at an unrelated knowledge tool rather than explaining tool selection. The library_id dependency is documented in the schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_nozzleAdd nozzleA

Convenience: add a Lagrangian-particle virtual fuel nozzle (e.g. hydrogen TPRD jet release). Automatically creates DEVC (QUANTITY=TIME, SETPOINT=0, ORIENTATION), PROP (MASS_FLOW_RATE / FLOW_RAMP / PARTICLE_VELOCITY / SPRAY_ANGLE / PARTICLES_PER_SECOND), PART (SPEC_ID / DIAMETER / MONODISPERSE / INITIAL_TEMPERATURE), the fuel SPEC (FORMULA + liquid-droplet properties taken from the built-in fuel database) and aligns REAC (FUEL / RADIATIVE_FRACTION / SOOT_YIELD / CO_YIELD) when no reaction is set yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNozzle base ID (e.g. TPRD)
xyzYesNozzle exit position [x,y,z] (m)
spec_idNoFuel species (default 'HYDROGEN'). Known fuels get FORMULA + liquid properties automatically: HYDROGEN, METHANE, ETHANE, PROPANE, BUTANE, ETHYLENE, PROPYLENE, ACETYLENE, AMMONIA, METHANOL, ETHANOL, PROPANOL, ISOPROPANOL, ACETONE, BENZENE, TOLUENE, N-PENTANE, N-HEXANE, N-HEPTANE, N-OCTANE, ISOOCTANE, N-DECANE, DODECANE.
diameter_umNoDroplet diameter in μm (default 1000)
orientationNoJet direction vector (default [0,0,1] = upward)
spray_angleNoCone half-angles [inner,outer] degrees (default [0,5] — narrow jet)
mass_flow_rateNoMass flow rate at t=0 in kg/s (default 0.068)
flow_ramp_pointsNoMass-flow time series [[t,f],...] multiplying MASS_FLOW_RATE (blowdown decay etc.)
particle_velocityNoInjection velocity in m/s (default 200)
initial_temperatureNoDroplet initial temperature in °C (default: the fuel's boiling point −2~3°C, e.g. -255 for hydrogen)
particles_per_secondNoParticles inserted per second (default 10000)

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false), while the description adds substantial behavioral detail: it enumerates the DEVC, PROP, PART, SPEC and REAC entries automatically created and notes REAC alignment happens only when no reaction is set. This goes well beyond structured fields and helps predict side effects.

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 description is front-loaded with 'Convenience: add...' followed by one dense sentence, with no filler text. The long parenthetical enumerations of namelist fields hurt readability slightly, as bullet points would be clearer for an agent parsing the side effects.

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?

For an 11-parameter tool with no output schema, the description covers creation behavior and side effects well, including the important REAC alignment condition. It omits prerequisites such as needing an open project or existing simulation, but annotations and the schema cover the remaining safety and parameter details.

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 100%, so the baseline is 3; the description adds value by mapping parameters to the FDS namelist fields they populate (e.g., mass_flow_rate/flow_ramp_points into PROP, spec_id into SPEC) and mentioning the built-in fuel database. It does not restate every default, but adds conceptual meaning beyond the schema.

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 'add' and resource 'Lagrangian-particle virtual fuel nozzle', with a concrete example (hydrogen TPRD jet release). It distinguishes itself from generic siblings like add_prop/add_device by framing itself as a convenience that automatically builds the full nozzle setup, so an agent can tell it apart without opening the schema.

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 through 'Convenience' and the hydrogen TPRD jet-release example, which points to when this tool is appropriate. However, no explicit when-not conditions or named alternatives (e.g., manually using add_prop/add_device/add_species) are provided, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_obstacleAdd obstacleB

Add an obstacle (solid block) to the FDS model. XB=[x1,x2,y1,y2,z1,z2] in metres. [bulc-mcp rules] GEN-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUnique identifier
xbYesBounding box [x1,x2,y1,y2,z1,z2]
surf_idsNoSurface IDs for faces

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so mutability and non-idempotence are covered. The description adds the coordinate ordering and metre units, plus a governance-rule pointer, but says nothing about duplicate-id behavior, overlap handling, mesh requirements, or what surf_ids do.

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?

Two short sentences, front-loaded with the action and immediately followed by the coordinate contract. The trailing rule reference is terse rather than bloated, though its unexplained angle-bracket syntax costs a bit of clarity.

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?

For a geometry-creating mutation tool with no output schema, the essentials (verb, target model, coordinate format and units) are present, and annotations carry the safety profile. It still omits surf_ids semantics, uniqueness constraints, and any hint about prerequisites such as an existing mesh.

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 coverage is 100%, so the schema already documents id, xb and surf_ids, and the baseline is 3. The description's only added meaning is the unit ('in metres') and the axis ordering, which is marginal but slightly beyond the schema's 'Bounding box [x1,x2,y1,y2,z1,z2]'.

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 gives a specific verb and resource ('Add an obstacle (solid block) to the FDS model') and the parenthetical clarifies the geometric primitive, which helps separate it from wall/floor siblings. It does not, however, name or contrast with close alternatives such as update_obstacle, transform_obstacle, or shape_add_box.

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 when-to-use guidance and no stated alternatives, despite a crowded sibling set (update_obstacle, transform_obstacle, add_wall, add_floor, shape_add_box). The only routing hint is a cryptic tag pointing at bulc_knowledge_search, which is not explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_propAdd propA

Add a &PROP device model. quantity presets seed standard defaults: 'LINK TEMPERATURE' (heat detector link), 'SPRINKLER LINK TEMPERATURE', 'CHAMBER OBSCURATION' (smoke detector), 'THERMOCOUPLE' (bead). Override any field. Reference from devices via prop_id. Every other FDS 6.10.1 spray key (mass flow, pressure/flow ramp, particle velocity, orifice, parcels, spray pattern shape/table, smokeview id …) goes in spray with the spr_upsert_spray_profile.prop key names. [bulc-mcp rules] DEVC-009 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPROP model ID
rtiNoResponse Time Index
sprayNoOther &PROP spray keys (spr_upsert_spray_profile.prop names, FDS units)
beta_cNo
beta_eNo
lengthNoSmoke chamber length (m)
offsetNoDroplet insertion offset (m)
alpha_cNo
alpha_eNo
part_idNoDroplet particle class
c_factorNoConduction factor
k_factorNoSprinkler K-factor
quantityYesPROP quantity preset (see description)
flow_rateNoSprinkler flow (L/min)
spray_angleNo
bead_densityNo
bead_diameterNo
bead_emissivityNo
bead_specific_heatNo
operating_pressureNo(bar)
initial_temperatureNo(°C)
activation_obscurationNoSmoke setpoint (%/m)
activation_temperatureNo(°C)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring it a non-readonly, non-idempotent, non-destructive write, the description adds real context: presets seed defaults, any field can be overridden, and unlisted FDS 6.10.1 spray keys must be routed through `spray` using spr_upsert_spray_profile.prop names. It does not say what happens on a duplicate id, which is the main residual gap.

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 action, then preset meanings, then the spray-routing rule. Dense but each sentence carries information; the trailing '[bulc-mcp rules] DEVC-009 …' fragment is somewhat cryptic but adds a pointer.

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?

For a 23-param mutation tool with no output schema, the description covers the two hardest concepts (preset semantics and spray-key routing). Missing only duplicate-id behavior and a note on units beyond what the schema already labels.

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 coverage is only 61% across 23 params, so the description must compensate and does: it enumerates the four quantity preset values with their meanings and explains the escape-hatch `spray` object. Many numeric physics fields (rti, beta, k_factor, bead_*) still rely on the schema's terse descriptions.

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 plus resource ('Add a &PROP device model') and immediately distinguishes it from siblings like update_prop/remove_prop by describing the preset-seeding behavior. An agent can tell what is created and how it is referenced (prop_id from devices).

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?

Explains the preset choice for quantity and points to bulc_knowledge_search for rules, which implies when the presets apply. However it never states when to reach for add_prop over add_device/add_heat_detector/add_sprinkler or when a preset vs full override is preferred, so alternatives are only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_rampAdd rampB

Add a time ramp (RAMP) for time-dependent parameters. Points are [time, value] pairs. [bulc-mcp rules] FIRE-008 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRAMP ID
pointsYesArray of [time, value] pairs

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the mutation profile is covered. The description adds the [time, value] semantics of the payload, but says nothing about what happens when the ID already exists (duplicate vs overwrite) despite idempotentHint=false, which is the key behavioral question for this call.

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 core action and payload shape are front-loaded in two tight sentences with no filler. The trailing bracketed rule reference is cryptic and slightly disrupts an otherwise clean structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with full schema coverage, no output schema and annotations covering the safety profile, the description supplies everything needed to invoke it. The unresolved FIRE-008 reference is a minor loose end rather than a blocking gap.

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 100%, so both 'id' and 'points' are already documented, including the [time, value] pairing. The description restates the same pairing without adding format, units, ordering or monotonicity constraints, so it earns only the baseline.

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 ('Add a time ramp (RAMP) for time-dependent parameters') and clarifies the data shape. It does not explicitly distinguish itself from the siblings update_ramp and remove_ramp, leaving the add-vs-update boundary to inference.

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?

No statement of when to add a ramp versus updating or removing one, and no prerequisites such as needing an existing RAMP ID. The embedded '[bulc-mcp rules] FIRE-008' pointer is unexplained and does not function as actionable usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_raw_namelistAdd raw namelistA

Add a raw namelist line emitted verbatim just before &TAIL — for settings with no GUI dialog (e.g. "&RADI RADIATIVE_FRACTION=0.35 /", "&PRES VELOCITY_TOLERANCE=1.E-4 /"). Must start with & and end with /. Use the dedicated tools for anything the GUI does model (&MESH/&OBST/&VENT/&SURF/&REAC/&DEVC/&CTRL/&SLCF/&BNDF/&DUMP/&TIME/&MISC) — a duplicate namelist is an FDS error. [bulc-mcp rules] GEN-016, SIM-002, GEN-017 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYesFull namelist line, e.g. "&RADI NUMBER_RADIATION_ANGLES=200 /"

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds genuine context beyond that: verbatim emission, insertion point (before &TAIL), format validation, and the duplicate-namelist error. Only minor gaps (no statement about how entries are ordered/listed) keep it from a 5.

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?

Three tight sentences, front-loaded with what it does and where the line lands, followed by use cases and exclusions. Dense with useful detail, though the trailing rules-reference line is mild noise.

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?

A single-parameter mutation tool with no output schema is adequately covered: usage conditions, format rules, placement, and error behavior are all present. The remaining gap is lifecycle behavior (ordering of multiple raw lines, interaction with removal) which is minor for a tool this scoped.

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 coverage is 100% and gives an example, so baseline is 3. The description adds a real constraint not in the schema ('Must start with & and end with /') plus two more concrete examples, which meaningfully improves correct invocation.

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 (add) and resource (raw namelist line), plus the exact placement semantics ('emitted verbatim just before &TAIL'). An agent can distinguish it from siblings like list_raw_namelists and remove_raw_namelist, and the examples of what a namelist line looks like remove all ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it ('settings with no GUI dialog') and when not to ('Use the dedicated tools for anything the GUI does model' with the full list of modeled namelists). It even names the failure condition for misuse (a duplicate namelist is an FDS error), so routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_slcfAdd slcfC

Add a slice file output (SLCF). Specify quantity and plane position. [bulc-mcp rules] ASET-001, ASET-004, OUT-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUnique SLCF ID
pbxNoX-plane position
pbyNoY-plane position
pbzNoZ-plane position
vectorNoInclude velocity vectors (default false)
spec_idNoSpecies ID for VOLUME FRACTION quantity
quantityYesQuantity: TEMPERATURE, VELOCITY, VISIBILITY, VOLUME FRACTION, etc.
cell_centeredNoCell-centered output (default true)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, non-destructive and non-idempotent, so the safety profile is covered structurally. The description adds nothing about what the write affects, whether duplicates conflict, or what the ASET-001/ASET-004/OUT-002 rules require — it merely cites rule IDs that are meaningless without another lookup.

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?

Two short sentences, front-loaded with the action, with no filler. The bracketed rules line is terse but is an unexplained pointer rather than clearly earning 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?

For an 8-parameter output-writing tool with no output schema, the schema and annotations carry most of the load, so the description is minimally sufficient. However, the cryptic rule IDs and the absence of any relationship to update_slcf/remove_slcf leave a real gap for correct invocation.

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 100%, so the schema already documents id, quantity, plane positions, vector, spec_id and cell_centered. The description only echoes 'quantity and plane position', adding no format, default, or constraint detail beyond the schema, which is the expected baseline when schema coverage is this high.

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 ("Add a slice file output (SLCF)") plus the two things to supply (quantity, plane position), which is enough to distinguish the action. It does not differentiate from the sibling mutation tools update_slcf / remove_slcf, so it falls short of 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 versus update_slcf, remove_slcf, list_slcf, or output_add_tenability_slices, nor any prerequisite or exclusion. The only vaguely directional text is the bulc rule reference, which tells the agent to consult knowledge but not when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_smoke_detectorAdd smoke detectorA

Convenience: add a smoke detector as a small obstacle with FDS override. Generates DEVC+PROP in FDS output. [bulc-mcp rules] DEVC-001, DEVC-009 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position (m)
yYesY position (m)
zNoZ position (m, default ceiling height)
idYesDetector ID (e.g. SD_1)
beta_cNoObscuration coefficient beta (default -0.8)
beta_eNoExtinction coefficient beta (default -1.0)
alpha_cNoObscuration coefficient alpha (default 1.0)
alpha_eNoExtinction coefficient alpha (default 1.8)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=false), and the description adds real behavior beyond them: the detector is physically instantiated as an obstacle with an FDS override, and it emits DEVC+PROP namelists into the FDS deck. A caveat would help (e.g. that calling twice with the same id is not idempotent), but the extra context is substantive.

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?

Two short, front-loaded sentences with zero filler: what it does, then what it produces. The bracketed rules tag is cryptic but compact and does point to a concrete follow-up tool.

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?

No output schema exists, and the description does cover the generated FDS output and a rule lookup path, which is adequate. It still omits whether an open project is required and what the tool returns on success, gaps that matter for an 8-parameter mutation 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 100% and every parameter including the alpha/beta defaults is documented there, so baseline 3 applies. The description contributes nothing about coordinate defaults (z = ceiling height) or the id naming convention beyond what the schema already says.

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 ('add a smoke detector') and clarifies the implementation ('as a small obstacle with FDS override') plus the side effect ('Generates DEVC+PROP in FDS output'). This implicitly distinguishes it from add_heat_detector, add_thermocouple, and add_device, though it never names those siblings 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?

'Convenience:' signals it is a shortcut over generic device/obstacle creation, and the rule tag points the agent at bulc_knowledge_search for DEVC-001/DEVC-009. However there is no explicit statement of when to pick this over add_device or add_heat_detector, and no prerequisites (e.g. whether it is safe alongside add_obstacle).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_speciesAdd speciesC

Add a tracked species.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSpecies name (e.g. CARBON DIOXIDE)
formulaYesChemical formula (e.g. CO2)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare that this is a non-read-only, non-destructive, non-idempotent mutation. The description adds no further behavioral detail beyond the vague qualifier "tracked" — it does not explain duplicate behavior, required preconditions, or what state is created.

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 description is a single front-loaded sentence with no wasted words. Its extreme brevity borders on under-specification, but it is structurally clean and concise.

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?

The annotations cover the safety profile and the schema fully covers both required parameters, so basic invocation context exists. However, the description omits domain context such as when a species should be added, how it relates to remove_species, and what "tracked" implies in the simulation setup.

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 100%, so both parameters are fully documented in the schema. The description adds no parameter meaning beyond what is already present, which is the expected baseline when the schema does the heavy lifting.

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 clear verb ("Add") and resource ("tracked species"), making the basic action unambiguous. It does not differentiate this tool from other add_* siblings such as add_material or add_surface, but the core purpose is clear.

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 explicit alternatives such as remove_species. It only names the action, leaving the agent to infer context from the tool name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_sprinklerAdd sprinklerA

Convenience: add a complete sprinkler head (FDS 6.10.1). Creates DEVC + PROP (QUANTITY=SPRINKLER LINK TEMPERATURE) + water-droplet PART (SPEC_ID=WATER VAPOR) from the project default spray profile (standard pendant K80: K 80 L/(min·bar^½), 1.0 bar, 68 °C, RTI 100, SPRAY_ANGLE 30/80, 10 m/s, 1000 µm, 5000 particles/s). Flow: give k_factor+operating_pressure (FDS derives Q=K√p), or flow_rate (optionally with pressure/K). K alone or pressure alone is rejected by FDS (ERROR 238). Upright heads also spray downward (only SMOKEVIEW_ID differs). profile_id picks another shared spray profile (e.g. ESFR or water mist from spr_upsert_spray_profile); spray / particle override any other &PROP / &PART key for this head (same keys as spr_upsert_spray_profile prop / part); activation opens it by time / CTRL / at t=0. [bulc-mcp rules] DEVC-001, DEVC-009, SPR-010 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSprinkler base ID (e.g. SPRK_1)
rtiNoResponse Time Index (m·s)^½ (default 100; quick response ≤ 50)
xyzYesPosition [x,y,z]
sprayNoOther &PROP keys for this head (spr_upsert_spray_profile.prop keys, e.g. {"spray_pattern_shape":"UNIFORM","offset":0.1})
k_factorNoK-factor, metric L/(min·bar^½) (default 80; US gpm/psi^½ × 14.41)
particleNoOther &PART droplet keys for this head (spr_upsert_spray_profile.part keys, e.g. {"distribution":"LOGNORMAL","sigma_d":0.6,"age":600})
flow_rateNoFlow rate in L/min (optional — default derives from K and pressure)
head_typeNopendant | upright | sidewall (default pendant)
activationNoHow the head opens: link (heat, default), time (DEVC TIME + SETPOINT), ctrl (CTRL_ID), initial (open at t=0).
profile_idNoShared spray profile id (default: project default profile)
orientationNoSpray axis (default [0,0,-1]; sidewall e.g. [1,0,0])
spray_angleNoSpray angle [min,max] degrees from the axis (default [30,80]; 4 values = x/y ellipse)
droplet_diameterNoMedian volumetric droplet diameter D_v0.5 in μm (default 1000)
particle_velocityNoDroplet exit speed (m/s, default 10)
operating_pressureNoOperating pressure (bar, default 1.0)
particles_per_secondNoComputational droplets per second per head (default 5000)
activation_temperatureNoActivation temp (°C, default 68)

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only state the generic write/non-idempotent/non-destructive profile; the description goes well beyond that by disclosing the three namelists created, the FDS validation failure mode (ERROR 238 for K-alone/pressure-alone), the override precedence rule (spray/particle override any other &PROP/&PART key for this head), the upright-heads-spray-downward quirk, and the activation semantics. This is exactly the extra behavioral context the annotations cannot carry.

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 convenience statement and creation summary are front-loaded, then detail follows. It is dense and sentence-heavy (long compound clauses on profiles and overrides), but nearly every sentence carries load – error codes, defaults, and precedence rules are all actionable.

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 17 parameters, nested objects, and no output schema, the description does the heavy lifting well: it explains creation, flow specification, override behavior, and activation. It omits the return value (acceptable with no output schema) and never addresses the overlapping sprinkler-head siblings, which is the main completeness gap.

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 coverage is 100%, so the baseline would be 3, but the description adds real meaning: the Q=K√p derivation relationship, the mutual-exclusion constraint between k_factor/pressure and flow_rate, the default profile versus profile_id selection, and how spray/particle merge with other keys. It stops short of documenting units for xyz or the activation sub-fields in narrative form.

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 verb and resource: it 'add[s] a complete sprinkler head' and enumerates exactly what is created (DEVC + PROP with QUANTITY=SPRINKLER LINK TEMPERATURE + water-droplet PART). However, it never distinguishes itself from the sibling spr_add_sprinkler_head / spr_update_sprinkler_head, so an agent could not tell from the text alone why it should prefer one over the other.

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?

It gives concrete flow rules (supply k_factor+operating_pressure, or flow_rate, and notes K-alone or pressure-alone is rejected by FDS with ERROR 238) and points to spr_upsert_spray_profile as the source for alternate profiles and prop/part keys. There is no explicit 'use this instead of X when...' statement, and no prerequisites (e.g. project must be open) are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_surfaceAdd surfaceA

Add a general surface (&SURF) with material layers, burning behaviour, thermal boundary conditions and injection. This is what gives walls/objects real heat transfer and lets them burn away. [bulc-mcp rules] SURF-001, VENT-005 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSurface ID
colorNoDisplay color as #rrggbb (emitted as RGB=r,g,b)
tau_qNoTAU_Q [s] — ramp-up time (negative = t² growth)
hrrpuaNoHRRPUA [kW/m²] (manual mode)
layersNoMaterial layers, outermost first. Each layer: thickness [m] + material composition (mass fractions summing to 1).
mlrpuaNoMLRPUA [kg/(m²·s)] (manual mode, exclusive with hrrpua)
backingNoBACKING
ramp_idNoRAMP_Q id (overrides tau_q)
ignitionNoBurn immediately or ignite at a temperature
tmp_backNoTMP_BACK [°C]
burn_awayNoBURN_AWAY — allow the obstruction to burn away
cell_sizeNoCELL_SIZE [m] — solid-phase cell size
tmp_frontNoTMP_FRONT [°C] — fixed surface temperature
tmp_innerNoTMP_INNER [°C]
emissivityNoEMISSIVITY
descriptionNoFree-text description (FYI)
layer_divideNoLAYER_DIVIDE
surface_typeNoSurface type ('layered' = PyroSim general surface)
e_coefficientNoE_COEFFICIENT [m²/(kg·s)] — water extinguishing coefficient
external_fluxNoEXTERNAL_FLUX [kW/m²]
net_heat_fluxNoNET_HEAT_FLUX [kW/m²]
reaction_modeNo'material' = burning governed by MATL pyrolysis, 'manual' = governed by HRRPUA/MLRPUA on this surface
droplet_surfaceNoWater droplets on this surface (Cartesian OBST/WALL faces only): allow_surface_particles=false removes droplets that land on it (drain floor, slab between floors); allow_underside_particles lets films run under horizontal surfaces; particle_extraction_velocity [m/s] removes films faster than this.
species_injectionNoSpecies injection rows (SPEC_ID/MASS_FLUX/MASS_FRACTION/VEL/VOLUME_FLOW/TAU_V)
particle_injectionNoParticle injection (PART_ID/PARTICLE_MASS_FLUX/NPPC/DT_INSERT/PARTICLE_SURFACE_DENSITY)
heat_transfer_modelNoHEAT_TRANSFER_MODEL — gas-side convective correlation. 'DEFAULT' omits the key; any other string than these is rejected by FDS.
convective_heat_fluxNoCONVECTIVE_HEAT_FLUX [kW/m²]
heat_of_vaporizationNoHEAT_OF_VAPORIZATION [kJ/kg]
ignition_temperatureNoIGNITION_TEMPERATURE [°C]
droplet_surface_unsetNodroplet_surface keys to remove (FDS default)
heat_transfer_coefficientNoHEAT_TRANSFER_COEFFICIENT [W/(m²·K)]

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the mutation profile is covered. The description adds domain framing (heat transfer, burn-away) but says nothing about what happens on an ID collision with an existing surface or how the new surface relates to assignment via assign_surface — gaps the annotations do not fill.

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?

Three sentences, front-loaded with the core action, with no filler. The rule-reference fragment ('[bulc-mcp rules] SURF-001, VENT-005 — bulc_knowledge_search "<id>"') is terse and slightly cryptic, but it is compact and actionable.

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?

For a 31-parameter, nested-object creation tool with no output schema, the description adequately conveys the tool's role, and the schema covers all inputs. It still leaves the sibling workflow implicit — nothing tells the agent that materials must pre-exist or that the surface must be attached with assign_surface — so it is strong but not exhaustive.

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 100% across 31 parameters with enums and nested objects fully documented, so the schema carries the load. The description names the broad parameter groups (layers, burning, thermal BC, injection) but adds no syntax or constraint detail beyond what the schema already states. Baseline 3 applies.

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?

Clear specific verb+resource: creates an FDS &SURF surface with layers, burning behaviour, thermal BCs and injection. It also conveys the downstream effect (walls get heat transfer, can burn away). It never names update_surface/remove_surface/list_surfaces to differentiate the create path from its siblings, so it stops short of 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use / when-not-to-use statement and no named alternatives (e.g., add_surface_from_library, update_surface). The only guidance is an implied prerequisite — consult bulc rules SURF-001 and VENT-005 via bulc_knowledge_search before adding — which is useful but partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_surface_from_libraryAdd surface from libraryB

Copy a surface preset from the built-in library into the model as a &SURF, pulling in any materials it needs. [bulc-mcp rules] SURF-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoOptional new ID in the model (defaults to the library ID)
library_idYesLibrary surface ID (see the Surfaces library in the GUI)

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false but say nothing about side effects. The description usefully discloses that this pulls in dependent materials ('pulling in any materials it needs'), which is real behavioral information beyond the structured fields. It stops short of saying what happens if the requested ID already exists or whether the copied materials are shared or duplicated.

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 core action is front-loaded in a single efficient sentence with no filler. The appended '[bulc-mcp rules]' fragment is terse to the point of being cryptic, slightly weakening the structure, but nothing is wasted.

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?

For a write operation with no output schema, the description covers the essential outcome (a &SURF is created plus its materials), which is adequate. It leaves open collision handling on the target ID and the exact source of valid library IDs beyond a GUI pointer, so it is complete enough to attempt the call but not to predict failures.

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 100% with only two parameters ('library_id' and optional 'id'), so the schema already documents both, including the default behavior of 'id'. The description adds no syntax, format, or sourcing detail beyond what the schema states, so the baseline 3 applies.

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 uses a concrete verb+resource: 'Copy a surface preset from the built-in library into the model as a &SURF,' which is materially distinct from add_surface (manual creation) and add_material_from_library (different resource). It does not explicitly name or route against those siblings, so an agent must infer the distinction from the phrase 'from library.'

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 explicit statement of when to choose this over add_surface or assign_surface. The trailing fragment '[bulc-mcp rules] SURF-001 — bulc_knowledge_search "<id>"' implies a rule-compliance step but is opaque enough that an agent cannot tell what precondition it must satisfy before calling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_thermocoupleAdd thermocoupleB

Convenience: add a thermocouple as a small obstacle with FDS override. Generates DEVC in FDS output. [bulc-mcp rules] DEVC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position (m)
yYesY position (m)
zYesZ position (m)
idYesThermocouple ID (e.g. TC_1)
emissivityNoEmissivity (default 0.9)
bead_diameterNoBead diameter (m, default 0.001)

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=false, so the mutation profile is covered. The description adds genuinely new context beyond that: the thermocouple is realized as a small obstacle with an FDS override and produces a DEVC in FDS output, which tells the agent about side effects on the model tree.

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?

Two compact sentences front-load the core purpose and the side effect, with no padding. The bracketed rule pointer is terse, though its 'DEVC-001 — bulc_knowledge_search "<id>"' form is cryptic without surrounding explanation.

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?

For a 6-parameter mutation tool with no output schema and no annotations gaps, the description covers the essential mechanics (obstacle + DEVC). It stops short of covering prerequisites (e.g., whether a surface or FDS override context is required) and sibling differentiation, which is the main remaining gap.

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 100%, so all six parameters (x/y/z, id, emissivity, bead_diameter) carry their own descriptions including units and defaults. The description mentions no parameter semantics at all, so the baseline 3 applies — the schema does the heavy lifting.

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 clear verb+resource ('add a thermocouple') and goes further by naming the implementation approach ('as a small obstacle with FDS override') and its output effect ('Generates DEVC in FDS output'). It does not, however, distinguish itself from device-adjacent siblings such as add_device, add_heat_detector, or add_smoke_detector, leaving the agent to infer the boundary.

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 explicit when-to-use or when-not-to-use guidance. The DEVC-001 rule pointer to bulc_knowledge_search hints at a compliance step but does not state when this tool should be chosen over add_device or add_heat_detector, so routing between siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_ventAdd ventB

Add a vent (boundary patch). XB defines the vent surface. [bulc-mcp rules] EVAC-002, VENT-002, VENT-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUnique identifier
xbYesVent surface [x1,x2,y1,y2,z1,z2]
surf_idYesSurface ID (e.g. OPEN, INERT, custom)
mass_fluxNoMass flux (kg/m²/s)
dynamic_pressureNoDynamic pressure (Pa)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the mutation profile is covered. The description adds the rule-id provenance pointer, which is genuinely extra behavioral context, but it omits what happens on a duplicate id, whether surf_id must reference an existing surface, and whether mass_flux and dynamic_pressure are mutually exclusive.

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?

Two short sentences with the core purpose front-loaded, followed by a compact rule-reference line. Nothing is padded, though the bracketed rule pointer is terse enough to be slightly cryptic without 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?

For a 5-parameter mutation with no output schema and no annotations gap, the description is minimally adequate but leaves out prerequisites (does surf_id need to exist?), the relationship between mass_flux and dynamic_pressure, and the effect of adding a vent on the FDS deck.

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 100%, so all five parameters including mass_flux and dynamic_pressure are already documented in the schema. The description only adds that XB defines the vent surface, which is a minor restatement of the schema's '[x1,x2,y1,y2,z1,z2]' hint. Baseline 3 applies when the schema carries the semantics.

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 ('Add a vent (boundary patch)') and clarifies that XB defines the vent surface, which distinguishes it from sibling mutators like add_bndf and add_surface. Sibling differentiation is implicit (contrast with list_vents/update_vent is obvious from the verb), but it does not explicitly say what makes a vent different from a generic boundary.

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?

The bulc rule references (EVAC-002, VENT-002, VENT-004) plus the bulc_knowledge_search pointer imply the agent should consult rules before adding a vent, which is useful procedural context. However, there is no explicit when-to-use vs update_vent, remove_vent, or add_bndf guidance, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_wallAdd wallB

Convenience tool: add a wall by specifying start point, end point, height, and thickness. Automatically calculates the OBST bounding box. Points are [x,y] on the floor plane. [bulc-mcp rules] GEN-003, GEO-002, DRW-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUnique wall identifier
endYesEnd point [x,y]
startYesStart point [x,y]
heightNoWall height in metres (default 3.0)
z_baseNoBase Z coordinate (default 0)
surf_idsNo
thicknessNoWall thickness in metres (default 0.2)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the safety profile is covered. The description adds real behavioral context by noting the automatic OBST bounding-box computation and that points live on the floor plane, but says nothing about duplicate ids or what happens on re-add despite idempotentHint=false.

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 purpose and defining inputs in one efficient sentence, followed by a short behavioral note. The appended rules/reference line is compact, though it is closer to metadata than to tool documentation.

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?

A 7-parameter mutation tool with no output schema and annotations that only cover the safety profile: the description gives the core geometry semantics but leaves surf_ids undocumented and doesn't state the effect of a duplicate id. Adequate but with clear gaps.

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 86%, so the schema already documents most parameters, including the height/thickness defaults. The description contributes only the floor-plane coordinate interpretation of start/end; undocumented 'surf_ids' and the meaning of z_base get no help from the description. Baseline 3 fits.

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 ('add a wall') and names the defining inputs (start, end, height, thickness) plus the automatic OBST bounding-box calculation. It is clear what the tool does, but it never distinguishes itself from close siblings like add_obstacle or draw_add_story, which an agent building geometry would reasonably compare against.

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 when-to-use or when-not-to-use guidance; nothing tells the agent why to pick add_wall over add_obstacle or the draw_* wall tools. The bulc rules line is a compliance pointer to bulc_knowledge_search, not guidance for selecting this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_windowAdd windowB

Convenience tool: add a window opening in a wall. Similar to add_door but with sill height. [bulc-mcp rules] GEO-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWindow (hole) identifier
widthNoWindow width (default 1.2m)
heightNoWindow height (default 1.2m)
wall_idYesID of the wall obstacle to cut
positionNoPosition along the wall 0-1 (default 0.5)
sill_heightNoSill height from floor (default 0.9m)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), lowering the disclosure bar. The description adds only that this cuts an opening into an existing wall plus a rule-check pointer; it does not explain whether the operation is undoable, whether the window must fit the wall bounds, or what the call returns. This is adequate but thin.

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?

Two short, front-loaded sentences with no filler. The bracketed rules reference is cryptic and slightly cryptic to parse, which keeps it just short of ideal, but the core purpose is stated first.

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?

With a 6-parameter mutation tool, full schema coverage, no output schema, and annotations covering safety, the definition is workable but leaves gaps: it says nothing about what the tool does to the wall geometry on success, failure conditions, or how it relates to the draw_set_window_params sibling that configures window parameters.

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 100%, with defaults documented per parameter (width 1.2m, height 1.2m, position 0.5, sill_height 0.9m), so the schema carries the load. The description adds nothing beyond the sill-height concept, which is the minimum-viable baseline.

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 concrete verb and resource ('add a window opening in a wall') and explicitly contrasts itself with the sibling add_door, noting the sill-height difference. That contrast lets an agent distinguish it from the similarly-named add_door/add_hole without opening schemas.

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?

Calling itself a 'convenience tool' and pointing to rule GEO-004 via bulc_knowledge_search implies context of use, but there is no explicit when-to-use vs add_door, add_hole, or the draw_add_story / draw_set_window_params family, nor any stated preconditions such as needing an existing wall.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

arch_analyze_drawingArch analyze drawingA
Read-onlyIdempotent

Read an architectural floor plan (.dxf, .dwg via the bundled converter, vector .pdf, or an image) and recognise the building: units and scale (DXF $INSUNITS, dimension values, PDF scale text), layer roles, wall centrelines with thickness (double-line or single-line walls), doors (swing arcs / door blocks), windows (window layers / blocks), columns, stair areas, room names and story labels. Returns candidateId, a summary and questions to confirm with the user (DRW-001…003). Images and outlined PDFs return needsVision — then read the picture yourself and call arch_import_floorplan_report. show = walls | openings | columns | rooms | levels | layers lists details (offset, limit, ids). Read-only; the file is read on this PC only. [bulc-mcp rules] DRW-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNo
showNo
limitNoRows for show (default 80, max 300)
offsetNo
optionsNoRe-analysis options: scaleMmPerUnit (drawing unit → mm; PDF: scale denominator, 1:100 → 100), wallLayers / doorLayers / windowLayers / columnLayers / excludeLayers (layer names), wallStyle auto|double|single, wallThicknessRange [min,max] m (default [0.05,0.6]), defaultWallThickness m (single-line walls, default 0.2), minWallLength m (default 0.3), page (PDF page, default 1).
filePathNoAbsolute path of the drawing (.dxf .dwg .pdf .png .jpg)
candidateIdNoRe-use an earlier analysis (with options = analyse again)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent/non-destructive/non-open-world, so the safety profile is covered. The description adds meaningful behavior beyond that: the file is read on this PC only (local, no uploads), the needsVision fallback for rasters/outlined PDFs, and the returned artifacts (candidateId, summary, questions DRW-001…003). It stops short of describing pagination limits on show output beyond the schema's limit description.

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 verb and resource, then progressively narrower detail (formats → extraction list → return artifacts → fallback → show values → read-only). It is dense and readable, though the single run-on sentence packs a lot, and the bracketed 'bulc-mcp rules' fragment is terse enough to be ambiguous about its purpose.

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?

No output schema exists, so the description carries the return-value burden — and it does, naming candidateId, summary, and confirmation questions (DRW-001…003). With 7 parameters including a nested options object, some option semantics rely on the schema, but the tool's overall contract is sufficiently complete for correct invocation.

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 coverage is 57%, so the schema documents roughly half the params. The description adds some value: it enumerates show values (walls | openings | columns | rooms | levels | layers) and mentions layer-role and scale inputs conceptually. But it does not clarify ids, or most nested options (wallThicknessRange, minWallLength, page) beyond what the schema already states, leaving the undocumented half partially unexplained.

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 (Read/recognise) and resource (architectural floor plan) with a precise enumeration of what is extracted: units/scale, layer roles, wall centrelines, doors, windows, columns, stairs, rooms. It distinguishes itself from the sibling spr_analyze_drawing (sprinkler) and names arch_import_floorplan_report as the downstream step, so an agent can place it without opening other schemas.

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?

Gives clear usage context: use it for .dxf/.dwg/.pdf/image plans, and explicitly routes the agent when images/outlined PDFs return needsVision — 'read the picture yourself and call arch_import_floorplan_report.' It also notes the re-analysis path via candidateId. It does not spell out when NOT to use it vs. other intake tools, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

arch_import_buildingArch import buildingA
Destructive

Create the building on one story in ONE undo step: walls as obstacles (axis-aligned box per wall, diagonal walls stair-stepped like the 2D editor), doors as holes 'Door_n' (also evacuation exits) and windows as holes 'Win_n' at sill height (not exits), optional columns and slabs. Source: candidateId from arch_analyze_drawing (exclude walls / openings by id) or building = {walls:[{start:[x,y],end:[x,y],thickness?,height?}], doors:[{at:[x,y]|wall:n,position:0..1,width?,height?}], windows:[{at|wall,position,width?,sill?,height?}], columns:[{xb:[x1,x2,y1,y2]}|{center,size}]} in metres; wall:n counts from 1 in the order of building.walls (openings that cannot be placed are listed in warnings). story = story id (default current story; z = its zMin, wall height = its height). dryRun defaults to TRUE — report first, confirm with the user, then call again with dryRun:false. mode append (default) | replace (removes what an earlier import with the same idPrefix created).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
storyNoStory id (draw_list_stories / project_info)
zBaseNoFloor elevation instead of the story zMin (m)
dryRunNoOnly report (default TRUE)
includeNoWhat to create: doors (true), windows (true), columns (true), floorSlab (false — slab just below the story floor), ceilingSlab (false — slab on top of the walls)
buildingNoHand-written building spec (metres) instead of candidateId. Door/window wall:n is 1-based (wall 1 = building.walls[0])
defaultsNowallHeight (default: story height), wallThickness (walls without one, default 0.2), doorWidth 0.9, doorHeight 2.1, windowWidth 1.2, windowSill 0.9, windowHeight 1.2, slabThickness 0.2 (m)
idPrefixNoId prefix (default 'A<story>_')
transformNoPlacement: origin = 'bbox_min' (default for drawings: lower-left corner of the building) | 'none' | [x,y] in drawing metres; target [x,y] (default [0,0]); rotateDeg about the target (counter-clockwise); mirrorY. Use the same origin for every story drawing of one building.
candidateIdNo
excludeWallsNoCandidate wall ids to skip
maxObstaclesNoRefuse above this many obstacles (default 3000, max 20000)
excludeOpeningsNoCandidate door/window ids to skip

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive/non-idempotent/non-readonly, and the description adds substantial context beyond them: the operation is a single undo step, dryRun defaults to TRUE, mode=replace removes geometry from a prior import with the same idPrefix, and openings that cannot be placed are listed in warnings. This is exactly the extra behavioral detail an agent 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?

Dense but front-loaded, leading with the outcome (create building in one undo step) before the spec details. The long inline building-spec sentence is information-heavy, though every clause maps to a real behavior.

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?

For a 13-parameter, nested-object, mutation tool with no output schema, the description covers source selection, defaults, dry-run workflow, id prefixing, and warnings. It omits transform/origin placement guidance, which lives only in the schema, but the overall coverage is strong given annotations carry the safety profile.

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 coverage is already high (85%), but the description still adds meaning: wall:n is 1-based in building.walls order, story defaults to the current story with z = zMin and wall height = story height, and mode append/replace semantics. It reinforces rather than merely restates the schema.

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 and resource ("Create the building on one story") and enumerates exactly what is produced: walls as axis-aligned obstacles, doors/windows as named holes, columns, slabs. It clearly differentiates itself from arch_analyze_drawing, which it names as the source.

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?

Gives a clear workflow: consume candidateId from arch_analyze_drawing or supply a hand-written building spec, run dryRun (default TRUE), confirm with the user, then re-call with dryRun:false. It does not explicitly compare against the sibling arch_import_floorplan_report, so it stops short of the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

arch_import_floorplan_reportArch import floorplan reportA
Destructive

Build walls / doors / windows from YOUR reading of a floor-plan picture (image or outlined PDF page — use when arch_analyze_drawing says needsVision). report = {building_width_m (real width of the outer walls), wall_height_m?, wall_thickness_m?, walls:[{x1,y1,x2,y2}] wall CENTRELINES in normalised image coordinates 0..1 (origin top-left, y down; split at corners, skip dimension lines, text, furniture, hatching), doors:[{x,y,width_m?}], windows:[{x,y,width_m?,sill_m?,height_m?}]}. image = {width,height} pixels (or imagePath) for the aspect ratio. The app converts the report with fixed rules (snap to horizontal/vertical, y flipped, origin at the lower-left wall corner) and creates the same objects as arch_import_building. Needs no AI key in the app. dryRun defaults to TRUE. [bulc-mcp rules] DRW-008, DRW-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
imageNoImage size in pixels
storyNo
zBaseNo
dryRunNoOnly report (default TRUE)
reportYesFloor-plan report (see description)
includeNoWhat to create: doors (true), windows (true), columns (true), floorSlab (false — slab just below the story floor), ceilingSlab (false — slab on top of the walls)
defaultsNowallHeight (default: story height), wallThickness (walls without one, default 0.2), doorWidth 0.9, doorHeight 2.1, windowWidth 1.2, windowSill 0.9, windowHeight 1.2, slabThickness 0.2 (m)
idPrefixNo
imagePathNoAbsolute path of the image (its header gives the size)
transformNoPlacement: origin = 'bbox_min' (default for drawings: lower-left corner of the building) | 'none' | [x,y] in drawing metres; target [x,y] (default [0,0]); rotateDeg about the target (counter-clockwise); mirrorY. Use the same origin for every story drawing of one building.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false. The description adds genuinely useful behavior beyond that: dryRun defaults to TRUE, the app converts the report with fixed rules (snap to H/V, y-flip, lower-left origin), and no AI key is required. It does not spell out what 'replace' destroys or auth requirements, so it is not a 5.

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?

Dense but front-loaded, leading with the purpose and activation condition before the report schema. It is long and run-on in places, but nearly every clause (coordinate origin, y direction, dryRun default, conversion rules) carries information an agent needs, so little is wasted.

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?

For an 11-param mutation tool with nested objects and no output schema, the description covers the hard parts: the report contract, coordinate conventions, dry-run safety, conversion semantics, and placement defaults. Gaps remain around the append/replace mode effect and story/zBase implications, but the definition is largely self-sufficient.

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?

With 64% schema coverage, the description meaningfully compensates: it fully specifies the required 'report' payload (fields, units, coordinate convention, splitting at corners, what to skip), the image aspect-ratio param, and the transform origin/target/mirrorY semantics. A few params (mode, story, zBase, idPrefix) get no description-level elaboration.

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+resource ('Build walls / doors / windows from YOUR reading of a floor-plan picture') and immediately names the trigger ('use when arch_analyze_drawing says needsVision'). It also ties itself to the sibling arch_import_building ('creates the same objects as arch_import_building'), so an agent can distinguish it without opening any schema.

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?

Gives an explicit activation condition ('use when arch_analyze_drawing says needsVision') and clarifies the app needs no AI key, which frames the division of labour with the vision path. It stops short of an explicit when-not (e.g., when to prefer arch_import_building), but the routing context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

assign_surfaceAssign surfaceA

Assign a surface (SURF_ID) to an obstacle, vent or geometry. Without 'faces' the whole object uses it; with 'faces' only those faces do (SURF_ID6 order -X,+X,-Y,+Y,-Z,+Z). [bulc-mcp rules] GEN-003, SURF-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
facesNoObstacle faces only: 'xn','xp','yn','yp','zn','zp' (-X,+X,-Y,+Y,-Z,+Z). Omit for all faces.
surf_idYesSurface ID to assign (a user surface or a built-in like INERT/OPEN)
target_idYesID of the obstacle / vent / geom
target_typeYesWhat to assign it to

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false); the description goes beyond them by disclosing the faces-scoping semantics and the exact SURF_ID6 axis ordering. It still doesn't say whether an existing assignment is overwritten, but it adds meaningful behavioral context.

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?

Two tight sentences, front-loaded with the core action and scoping rule; the only slight clutter is the inline rule-ID citation.

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?

For a 4-parameter mutation tool with no output schema, the description covers target types and face scoping adequately; only the overwrite/return behavior is unaddressed.

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 coverage is 100%, and the description's face-order note ('SURF_ID6 order -X,+X,-Y,+Y,-Z,+Z') largely restates the 'faces' property description. Baseline 3 applies since the schema already carries the parameter detail.

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?

Specific verb+resource with explicit target set: 'Assign a surface (SURF_ID) to an obstacle, vent or geometry.' This separates it from sibling creators like add_surface/update_surface, though no sibling is named to make the distinction explicit.

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?

It explains the scoping behavior (whole object vs. selected faces) but never states when to prefer this tool over alternatives such as update_surface or set_bndf. The bulc-mcp rule citation points to further reading, which is a weak form of guidance rather than an explicit when/when-not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auto_cutcell_meshAuto cutcell meshA

Build a cut-cell multi-mesh deck from &GEOM triangulated shapes (plus OBSTs). Cells shrink where the fluid gap is narrow (gap / gap_cells), the GEOM surface band always gets the finest cell so the engine keeps its cut-cell wall physics there, sharp curvature gets one level finer, and levels change at most 2:1 between neighbouring blocks. Cell sizes are min_cell x 2^k. If the deck has no GEOM this is identical to auto_multimesh. Over budget it relaxes curvature, buffer, gap_cells, then raises min_cell and reports what it changed; a gapped, overlapping or misaligned deck is refused. Engine constraints (engine multimesh ratio_union_grid): (1) every mesh must use CUBIC cells whose size is the finest cell x 2^k (k in 1,2,4,8,16); (2) every mesh boundary and the union extent must land on a fine-grid index that is a multiple of the LARGEST ratio actually used; (3) meshes must tile the domain with no overlap and no gap; (4) a 1:4 or larger ratio makes the engine print an experimental-feature warning and switches it to per-mesh storage (MM2) plus the composite block-CG v2 pressure solve, both automatically. Verify with list_meshes.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_cellYesCoarsest cell size (m), e.g. 0.2. Rounded DOWN to min_cell x 2^k.
min_cellYesFinest cell size (m), e.g. 0.05 — used on the GEOM surface band and in narrow gaps.
gap_cellsNoMinimum cells across a narrow gap (default 4, floor 3).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say the tool is a non-readonly, non-destructive mutation; the description goes far beyond by disclosing the refinement rules, the ordered budget-relaxation behavior (curvature, buffer, gap_cells, then min_cell) with reporting of changes, the refusal conditions for invalid decks, and the automatic MM2 + block-CG v2 switch at a 1:4 ratio. These are exactly the behavioral traits that change how an agent should call and then validate the tool.

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 purpose and the sibling comparison before moving into mechanics; every sentence carries substantive information and there is no filler. It is dense and long, with the engine-constraint enumeration reading more like reference material than selection guidance, which keeps it just under top marks.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description supplies the missing pieces: what it produces, what triggers refusal, how it self-reports budget-driven changes, and how to verify the result via list_meshes. Nothing an agent needs to call it safely and correctly is absent.

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 coverage is 100%, so baseline is 3. The description still adds meaning the schema does not: that cell size follows gap/gap_cells in narrow gaps, that min_cell is applied to the GEOM surface band, and how the params interact with the 2^k snapping and 2:1 level-change constraint.

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 and resource ('Build a cut-cell multi-mesh deck from GEOM triangulated shapes') and immediately distinguishes itself from its closest sibling by noting that with no GEOM it is identical to auto_multimesh. An agent can route between the two without opening either schema.

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?

Gives clear conditions: use it when the deck has GEOM shapes, and the no-GEOM case is explicitly delegated to auto_multimesh. It also names the verification step ('Verify with list_meshes') and states the deck is refused if gapped/overlapping/misaligned. It stops short of covering other mesh siblings (set_meshes, merge_meshes, auto_fit_mesh), so it is clear context rather than exhaustive when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auto_fit_meshAuto fit meshA

Auto-fit the mesh domain to the bounding box of all obstacles plus margin; recomputes NI/NJ/NK to keep the current cell size. ⚠ Resets any multi-mesh deck to a single mesh. Use set_meshes / auto_multimesh to keep or build a multi-mesh deck. [bulc-mcp] Resets a multi-mesh deck to a single mesh (MESH-004). [bulc-mcp rules] MESH-001, MESH-005, GEO-006 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
margin_zNoZ margin (m), default 0
margin_xyNoXY margin (m), default 0.5

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only say readOnlyHint=false, idempotentHint=false, destructiveHint=false, which tells the agent almost nothing about consequences. The description adds the crucial disclosure that any multi-mesh deck is reset to a single mesh, plus a warning glyph, which the annotations fail to convey. I read this as an expansion of behavior rather than a contradiction, since the reset alters mesh topology rather than deleting user objects, but the tension with destructiveHint=false is real.

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 core sentence is front-loaded and the warning plus alternative follow in the right order with no filler. The two bracketed [bulc-mcp] rule-ID lines are terse metadata that slightly clutter the definition, but they do point to bulc_knowledge_search for detail.

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?

For a two-parameter, no-output-schema tool this covers the essentials: what is recomputed, the destructive side effect, and the sibling to use instead. It stops short of stating prerequisites (e.g., behavior with no obstacles present) or the units/limits of the fit, which is the remaining gap.

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 100% and both margin parameters carry their own descriptions and defaults, so the baseline is 3. The description only alludes to 'plus margin' without explaining how margin_xy and margin_z differ or how they affect the fit, so it adds little beyond the schema.

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?

Specific verb+resource with scope: it fits the mesh domain to the obstacle bounding box and recomputes NI/NJ/NK while preserving cell size. This distinguishes it cleanly from siblings like set_meshes, auto_multimesh, and set_mesh_cell_size. An agent can tell what it does without opening the schema.

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?

It names explicit alternatives and the condition that selects them: use set_meshes / auto_multimesh to keep or build a multi-mesh deck. That is real routing guidance. It doesn't distinguish itself from auto_cutcell_mesh or slice_mesh/merge_meshes, so 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auto_multimeshAuto multimeshA
Destructive

Build a multi-mesh deck from the OBSTRUCTION geometry. It measures the fluid gap everywhere (obstacles minus HOLEs, so doorways stay open), gives narrow places 3+ cells across and open places the default wide cell, then merges equal-size regions into boxes cut on obstacle faces so walls stay on mesh boundaries. Wall slabs up to 2 cells thick are absorbed into a neighbour. Cell sizes are quantised to min_cell x 2^k; an overlapping, gapped or misaligned deck is refused, not committed. The domain may grow to a multiple of the coarsest cell; OPEN vents follow. Engine constraints (engine multimesh ratio_union_grid): (1) every mesh must use CUBIC cells whose size is the finest cell x 2^k (k in 1,2,4,8,16); (2) every mesh boundary and the union extent must land on a fine-grid index that is a multiple of the LARGEST ratio actually used; (3) meshes must tile the domain with no overlap and no gap; (4) a 1:4 or larger ratio makes the engine print an experimental-feature warning and switches it to per-mesh storage (MM2) plus the composite block-CG v2 pressure solve, both automatically. Verify the result with list_meshes.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_cellYesCoarsest cell size (m), e.g. 0.2. Rounded DOWN to min_cell x 2^k.
min_cellYesFinest cell size (m), e.g. 0.05. Must be > 0; it is the bottom of the 2^k ladder.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive/non-idempotent, but the description adds substantial behavior beyond them: an invalid deck is 'refused, not committed', the domain may grow to a multiple of the coarsest cell with OPEN vents following, and a 1:4+ ratio silently switches the engine to MM2 storage plus composite block-CG v2. That is exactly the side-effect detail an agent 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?

The what-is-built sentence is front-loaded before the constraints, so the important part lands first. It is dense and long with parentheticals, and the min_cell x 2^k quantisation is stated twice, but the length is largely justified by the complexity of the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mesh generator with no output schema, the description covers inputs' effect, refusal behavior, domain growth, engine side effects, and a verification step. An agent has everything needed to call it and interpret the outcome.

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 100%, and the schema already documents the 'rounded DOWN to min_cell x 2^k' rule that the description restates. The extra engine-constraint ladder (k in 1,2,4,8,16) gives marginal added meaning, so the baseline 3 is appropriate.

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 opening sentence states a specific verb+resource ('Build a multi-mesh deck from the OBSTRUCTION geometry') and the algorithm detail makes the tool unmistakable. It never explicitly contrasts itself with the closely related siblings (auto_cutcell_mesh, auto_fit_mesh, set_meshes), so the sibling-differentiation half of the top criterion is only implied.

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 description ('Build a multi-mesh deck...') and one follow-up alternative is named ('Verify the result with list_meshes'). However, there is no guidance on when to prefer this over auto_cutcell_mesh, auto_fit_mesh, or set_meshes, and no stated prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulc_check_deckCheck an FDS deckA
Read-onlyIdempotent

Deterministic FDS 6.10.1 deck check with rule ids: mesh XB/IJK, cell aspect ratio, 2·3·5 cell counts, multi-mesh overlaps and cell ratios, objects and devices outside the meshes, VENT planes, undefined SURF/MATL/PROP/PART/RAMP/CTRL references, HRRPUA without &REAC, total HRR and D*/dx, dump intervals ≥ T_END, missing OPEN boundary or SLCF, detector/sprinkler PROP data, spray flow keys, CHID. Give deck_text, a local .fds path, or from_app=true for the deck of the project open in BULC. Complements validate_project (which also checks app-side state). FDS 덱을 규칙 id 와 함께 결정적으로 점검합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAbsolute path of a local .fds file (≤ 4 MB)
from_appNoCheck the deck of the project open in the BULC app (uses preview_fds)
deck_textNoFDS input text
min_severityNoHide findings below this severity (default info)

TDQS

A4.1/5.0
Behavior4/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 safety is covered. The description adds genuine behavioral context: it is deterministic, emits findings with rule ids, and lists the full validation coverage. The 4 MB cap is in the schema, and return format/pagination is not described, so not a 5.

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?

Purpose and the how-to-invoke guidance are front-loaded, and the dense rule list earns its place by disclosing validation coverage. Slightly verbose, and the trailing Korean sentence duplicates the purpose line, costing a point.

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?

No output schema exists, but the description conveys the shape of the result (findings tagged with rule ids, severity filter) and all required invocation context. Safety is fully covered by annotations. Adequately complete for a read-only checker.

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 100%, so the baseline is 3. The description restates the three input modes rather than adding syntax or precedence details beyond the schema, and the min_severity filtering is only described in the schema. Little added meaning over structured fields.

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 (check) and resource (FDS 6.10.1 deck) with clear scope: deterministic validation with rule ids. It enumerates concrete checks and explicitly distinguishes itself from validate_project. An agent can tell exactly what it does without opening the schema.

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?

Specifies the three invocation modes (deck_text, local .fds path, from_app=true) and names the sibling validate_project with the differentiating condition (which also checks app-side state). Clear context for choosing it, though it lacks explicit 'when-not-to-use' exclusions beyond the validate_project complement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulc_connection_statusBULC connection statusA
Read-onlyIdempotent

Check whether the BULC desktop app is running and reachable through its local bridge, whether the program answering is really BULC, how many tools it exposes, whether its tool set matches the bundled snapshot, and whether this server is showing the live tool list or the bundled snapshot. Call this first, and again whenever an app tool fails. BULC 앱 연결 상태를 확인합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/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. The description's additions (identity verification, snapshot comparison, live-vs-bundled state) describe what is inspected rather than behavioral traits like side effects, permissions, or rate limits, so it sits at the adequate baseline for an annotated read-only tool.

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 verb and the enumerated checks, followed by the actionable call-first directive. The five-clause list is dense and the trailing Korean sentence duplicates the preceding English content, which is minor waste but no real bloat.

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?

There is no output schema, so the description helps by enumerating the states being reported (reachability, identity, tool count, snapshot match, live-vs-bundled). It does not describe the actual response shape or field names, which is the one remaining gap for a schema-less diagnostic tool.

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 clarify beyond confirming the call is argument-free.

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 ('Check') and lays out precisely what is verified: app running/reachable via the local bridge, identity of the responder, tool count, snapshot match, and live-vs-bundled tool list. No sibling tool performs this diagnostic, so the agent can distinguish it immediately.

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?

Gives explicit invocation timing: 'Call this first, and again whenever an app tool fails.' This is clear routing guidance with a concrete trigger. It stops short of naming an alternative or a when-not condition, but no alternative exists among the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulc_drawing_intakeDrawing intakeA
Read-onlyIdempotent

First step for any drawing the user gives (DWG, DXF, PDF, image, ZIP bundle, IFC, or an .fds deck). Pass the ABSOLUTE local path. Reads the file on this PC only — it never uploads anything — and classifies it (architectural plan, sprinkler plan, piping isometric, HVAC plan, FDS deck) from the extension, file name, DXF units/layers/blocks/line angles, PDF pages and fonts, ZIP contents or IFC entities. Returns the playbook to follow, the questions to ask the user (units, scale, origin, layers …) and the tool sequence (architectural plans → arch_analyze_drawing / arch_import_building, piping → spr_analyze_drawing / spr_import_network). For DXF plans, extract_geometry=true also returns wall centre-line candidates in metres (fallback for older apps). Text inside the drawing (title blocks, notes) is never returned. 도면 파일을 로컬에서 분류하고 플레이북·질문·도구 순서를 돌려줍니다(업로드 없음).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path of the file on this PC
unitsNoOverride the drawing units when the file does not state them
purposeNoWhat the user wants to do with it (default auto)
max_wallsNoMaximum wall candidates (default 150)
wall_layersNoDXF layers to take wall lines from (default: layers whose name looks like walls)
extract_geometryNoDXF only: return wall centre-line candidates (metres, origin at the drawing's lower-left)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false. The description adds substantial context beyond those: it reads files locally and never uploads, classifies from specific file features (extension, name, DXF layers, PDF fonts, ZIP contents, IFC entities), never returns text inside the drawing, and discloses that extract_geometry returns wall centre-lines. No contradiction with 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?

The description is front-loaded with the key purpose and usage in the first sentence, and most sentences carry useful technical detail. It is somewhat long, and the final Korean sentence repeats information already stated in English, which slightly dilutes conciseness without causing confusion.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full burden of explaining return values and does so clearly: it returns the playbook, questions to ask, tool sequence, and optional wall centre-line candidates. It also covers file formats, classification criteria, and privacy behavior, leaving no critical gap for an agent to invoke it correctly.

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 100%, so the schema already documents all six parameters. The description reinforces 'Pass the ABSOLUTE local path' and adds a fallback context for extract_geometry, but does not meaningfully extend most parameters beyond what the schema provides. Baseline 3 is appropriate.

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?

The description states a specific verb and resource: it classifies a drawing file and returns a playbook, questions, and a tool sequence. It explicitly positions itself as the 'first step' for any drawing, which distinguishes it from downstream siblings like arch_analyze_drawing and spr_analyze_drawing. An agent can select it without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening phrase 'First step for any drawing the user gives' gives explicit usage context, and the description names the downstream tools to use for each classification outcome (architectural plans → arch_analyze_drawing / arch_import_building, piping → spr_analyze_drawing / spr_import_network). This effectively routes the agent to the correct alternative after intake.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulc_find_toolsFind BULC app toolsA
Read-onlyIdempotent

Find BULC app tools by keyword (Korean or English) or category and return their names, descriptions and full input schemas. Categories: project (open/save/run/results/ASET/screenshots), arch (floor-plan drawings), geometry, fire, ventilation, device, mesh, material, surface, output, query, evac, spr, hvac, draw, furniture, result, shape. In the compact profile, call the tool you found with bulc_call. 키워드로 앱 도구를 찾습니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum tools (default 6, max 25)
namesNoReturn exactly these tools
queryNoWhat you want to do, e.g. 'add a sprinkler head', '연기 감지기', 'slice output'
categoryNoRestrict to one category

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, non-open-world), and the description adds value beyond them by disclosing the return content (names, descriptions, full input schemas) and the compact-profile follow-up contract with bulc_call. Pagination/rate behavior is left to the schema's limit field.

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?

Purpose is front-loaded in the first clause, followed by the return description and the category list, which is long but genuinely load-bearing since it defines the accepted category values. The trailing Korean sentence is redundant for English readers but adds language coverage.

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?

For a read-only discovery tool with full schema coverage, the description supplies purpose, the category vocabulary, and the follow-up call pattern. No output schema exists but the description states what is returned. Only the relationship to sibling discovery tools is unaddressed.

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 coverage is 100%, so the baseline is 3; the description earns above that by enumerating the full category taxonomy (project, arch, geometry, fire, ..., shape) even though the 'category' parameter has no schema enum, effectively supplying the missing value set. It also gives bilingual keyword examples implicitly via the Korean sentence.

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 precise verb+resource: 'Find BULC app tools by keyword (Korean or English) or category' and declares the return payload (names, descriptions, full input schemas). As a meta-discovery tool it is unmistakably distinct from every concrete sibling (shape_*, evac_*, spr_*, etc.).

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?

Clear context for invocation (keyword or category lookup) and an explicit next step: 'In the compact profile, call the tool you found with bulc_call.' It does not, however, distinguish itself from other discovery siblings such as bulc_knowledge_search or bulc_get_rules, so there is no when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulc_get_rulesGet BULC rulesA
Read-onlyIdempotent

List modelling rules filtered by domain, severity, class (applies_to), confidence, or the tool they mention. Use before a phase of work (e.g. domain=sprinkler, min_severity=warning) and quote rule ids when explaining. Works without the app. 규칙을 영역·심각도·도구별로 가져옵니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoSpecific rule ids
toolNoRules that name this tool in check/fix
limitNoMaximum rules (default 40)
domainNogeneral | geometry | mesh | boundary | fire | surface | device | output | simulation | evacuation | hvac | sprinkler | aset | drawing | troubleshooting
formatNosummary (default): one line per rule; full: condition, check, fix
severityNoExactly this severity
applies_toNoOntology class, e.g. Mesh, Fire, Nozzle
confidenceNo
min_severityNoThis severity or worse (error > warning > info)

TDQS

A3.8/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 covered. The description adds one genuinely useful behavioral fact not in the annotations ('Works without the app'), but says nothing about result ranking, pagination beyond the schema's limit, or how the confidence tiers affect output.

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?

Purpose and filters are front-loaded in the first sentence, and the usage hint follows immediately. The trailing Korean sentence duplicates the first clause, which is a small redundancy, but the whole thing stays short and skimmable.

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?

For a read-only, no-required-parameter list tool with annotations covering safety, the description is largely sufficient: it covers filters, timing, and offline availability. With no output schema, it could have described the summary vs full return shapes, which is the only material gap.

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 coverage is 89% (baseline 3), but the description adds real value: it maps the ambiguous 'applies_to' parameter to 'class', names 'confidence' as a valid filter (that property has only an enum and no schema description), and pairs two filters in a worked example. That goes beyond restating the schema.

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 ('List modelling rules') plus the filtering dimensions, so the agent knows exactly what it returns. It does not name sibling tools (e.g. bulc_knowledge_search, get_conventions, bulc_check_deck) to sharpen the boundary, so it stops short of 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit timing ('Use before a phase of work') with a concrete example filter combination (domain=sprinkler, min_severity=warning) and a downstream behavior ('quote rule ids when explaining'). No when-not-to-use or explicit alternative is offered, so it is clear context rather than full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulc_mesh_advisorMesh advisorA
Read-onlyIdempotent

Cell-size advice from the fire size: characteristic fire diameter D* = (Q / (ρ∞ cp T∞ √g))^(2/5) and the cell sizes for D*/dx = 4 (coarse), 10 (moderate) and 16 (fine). With domain_xb it proposes IJK per axis rounded to counts made of 2, 3 and 5 (friendly to the FFT pressure solver), the resulting cells and the total cell count. Works without the app. 화원 크기로 셀 크기와 IJK 를 제안합니다(MESH-002, MESH-003, MESH-010).

ParametersJSON Schema
NameRequiredDescriptionDefault
hrr_kwYesPeak heat release rate of the design fire in kW
qualityNoTarget resolution at the fire (default moderate)
ambient_cNoAmbient temperature in °C (default 20)
cell_sizeNoUse this cell size (m) instead of the quality target
domain_xbNoDomain [x1,x2,y1,y2,z1,z2] in m

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds useful context beyond that: the exact formula used, that IJK counts are constrained to factors of 2/3/5 for FFT-solver friendliness, and that it works without the app.

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 computation and appropriately sized for a numerically non-trivial tool. The formula is dense but earns its place; the trailing Korean sentence and rule codes are marginally redundant but brief.

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 output schema, the description carries the return burden and does so well, enumerating the outputs (cell sizes, per-axis IJK, resulting cells, total cell count). The only gap is not naming when to use this versus the other mesh tools.

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 coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains that quality maps to D*/dx = 4/10/16 (coarse/moderate/fine) and that domain_xb drives the IJK proposal. That clarifies the enum's semantics beyond the schema's bare labels.

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+resource: it computes cell-size advice from the design fire size, via the characteristic fire diameter D* and the D*/dx targets, and optionally proposes IJK per axis and total cell count. This distinguishes it clearly from siblings like auto_fit_mesh, set_mesh_cell_size and auto_multimesh, which manipulate mesh objects rather than advise on sizing.

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 content ('Cell-size advice from the fire size', 'Works without the app'), signalling a pre-simulation advisory call that does not require the running app. However, it never states when to prefer this over auto_fit_mesh or when to supply cell_size vs quality, and no explicit alternative is named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulc_plan_checkCheck a plan before actingA
Read-onlyIdempotent

Review the sequence of tool calls you intend to make BEFORE calling them. Checks tool names and argument names against the live app (or the bundled snapshot), and the plan against the BULC rules: units and XB order, total HRR from HRRPUA × area, fires the user did not ask for, opening the floor boundary, single-mesh tools after multi-mesh, dump intervals ≥ T_END, re-running hydraulic/HVAC calculations before applying them to FDS, unique labels for sprinkler heads and HVAC terminals, dry runs before drawing imports, validate_project / sim_preflight before sim_start, user confirmation, evacuation run order, file tools of other servers, and more. Returns findings with rule ids and the playbook to follow. Works without the app. Steps are objects {tool, args} or strings like 'add_fire {"hrrpua": 500, "xb": [..]}'. 실행 전에 계획을 규칙으로 점검합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoWhat the user asked for, in their words (used for context checks)
stepsYesPlanned calls in order: {tool, args?, note?} or 'tool_name {json args}'
run_confirmed_by_userNotrue if the user has confirmed the run conditions
fire_requested_by_userNotrue if the user explicitly asked for a fire source or gave its location/size

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: it 'works without the app' (or against a bundled snapshot) and returns findings plus a playbook to follow — details an agent cannot get from 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?

Front-loaded with the action and its timing before the exhaustive rule enumeration, which is dense but load-bearing for understanding what is checked. Slight deduction for the very long rule list and a redundant Korean restatement of the opening sentence.

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?

No output schema exists, and the description compensates by saying it returns findings with rule ids and a playbook. Combined with offline-mode disclosure and step-format examples, an agent has what it needs; minor gaps remain around error behavior for unrecognized tool names and whether findings are advisory or blocking.

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 coverage is 100%, so the baseline is 3. The description goes beyond the schema by spelling out the accepted step formats with a worked example ('add_fire {"hrrpua": 500, "xb": [..]}'), and by tying the boolean flags to concrete rules it checks (user confirmation, fires the user did not ask for).

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 precise verb and object — 'Review the sequence of tool calls you intend to make BEFORE calling them' — and enumerates the exact checks performed (tool/arg name validation against app or snapshot, BULC rules, HRR from HRRPUA × area, mesh ordering). It is clearly distinguishable from validate_project, sim_preflight and bulc_check_deck, which validate artifacts rather than a planned call sequence.

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?

The temporal guidance is explicit and front-loaded ('BEFORE calling them'), and the rule list implies the situations it covers (fires, sim runs, meshes, import ordering). It does not, however, state when NOT to use it versus siblings like bulc_check_deck or validate_project, so the agent must infer the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

capture_viewCapture viewA
Read-onlyIdempotent

Screenshot of the running app for visual checking: view = current (default) | 2d (plan of a story) | 3d | result (result viewer) | shape (Shape Studio). story = story id to show in 2D. region = viewport (default, only the drawing area) | window. Returns the PNG as an image (and its path); savePath (absolute .png) also keeps a copy. Live app only. [bulc-mcp] Returns the picture as an image; savePath also writes a PNG on this PC. [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNo
storyNo2D: story id to show
regionNo
maxWidthNoDownscale to this width in pixels (default 1600)
savePathNoAlso save the PNG here (absolute .png path)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive, local (openWorldHint=false) behavior, so that burden is lifted. The description adds real value beyond them: the PNG is returned both as an image and a path, savePath writes a file to the local PC, and the capture requires a live app — none of which the annotations convey.

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 purpose, then parameter semantics, then return behavior — a good funnel. The duplicated '[bulc-mcp] Returns the picture as an image' sentence repeats the first paragraph, and the trailing rules-reference line is boilerplate rather than descriptive content.

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?

No output schema exists, so the description correctly steps in to describe the return (image plus path, optional file copy). For a 5-param, zero-required capture tool the definition is nearly complete; only edge cases like maxWidth's default interplay and failure modes when no app is running are unstated.

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 coverage is only 60% (view and region carry enum values but no descriptions), so the description must compensate — and it does, explaining each view enum value's meaning and that region=viewport captures only the drawing area vs. window. It says nothing extra about maxWidth beyond the schema, and savePath's absolute-path requirement is already in the schema.

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+resource: 'Screenshot of the running app for visual checking', then enumerates the five view modes (current/2d/3d/result/shape) so the agent knows exactly what each capture targets. This differentiates it from shape_screenshot (Shape Studio-specific) and result_* 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?

Gives clear context ('for visual checking') and a hard prerequisite ('Live app only'), plus the 'story = story id to show in 2D' routing rule. It does not, however, explicitly name an alternative for capturing Shape Studio (shape_screenshot) or state when this is the wrong choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_add_storyDraw add storyB

Add a new building story (floor level) [bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the write-and-non-repeatable profile is covered. The description adds a small amount of behavioral context by flagging that EVAC-001/GEO-002 rules govern this operation and pointing to bulc_knowledge_search, but it says nothing about side effects on existing stories or what the new story inherits.

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?

Two lines, front-loaded with the core action, with no padding. The rule-reference line is terse and somewhat cryptic but does not waste space.

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?

For a zero-parameter mutation with no output schema and descriptive annotations, the definition is minimally adequate: it says what is created. It omits how the new story relates to existing stories (ordering/height defaults) and what the caller should expect back, which an agent would reasonably want before invoking a non-idempotent write.

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 schema carries no parameter semantics to explain and the baseline is 4. The description's clarification that a 'story' is a floor level is the only semantic annotation needed.

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: 'Add a new building story (floor level)'. The parenthetical clarifies the domain term 'story', and the verb 'add' cleanly distinguishes it from siblings draw_remove_story, draw_list_stories and draw_update_story. It stops short of naming any sibling explicitly, so it is clear but not fully differentiated.

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 versus draw_update_story or draw_set_wall_params, nor any prerequisite (e.g. whether a project/story must already exist). The only contextual pointer is the cryptic '[bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search "<id>"' line, which hints that rules apply but does not tell the agent when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_list_storiesDraw list storiesB
Read-onlyIdempotent

Get current building stories list (read-only) [bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/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. The description merely repeats 'read-only' and adds no further behavioral context such as ordering, pagination, or what the story list contains.

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?

The first sentence is concise and front-loaded. The second line, '[bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search "<id>"', is cryptic and does not clearly earn its place.

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?

For a simple, parameterless, read-only list operation with rich annotations and no output schema, the description is nearly complete. The missing piece is any indication of when to prefer this tool over other project-inspection tools.

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 per the rubric the baseline is 4. The empty schema needs no additional parameter explanation from the 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?

The description clearly states a specific verb and resource: 'Get current building stories list'. This distinguishes it from write-oriented siblings like draw_add_story and draw_remove_story, 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?

It does not say when to use this tool versus alternatives such as get_object_properties or list_obstacles. The only contextual hint is '(read-only)', which describes safety rather than usage conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_remove_storyDraw remove storyC
Destructive

Remove a building story by ID [bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStory ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds nothing beyond that — it does not say what happens to dependent geometry, walls, or doors when a story is removed, nor whether confirmation is required.

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?

The core sentence is short and front-loaded with the verb and resource. However, the appended '[bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search' fragment is noise that does not belong in a tool description and hurts density.

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?

For a simple one-parameter destructive delete with annotations covering the safety profile and a fully documented parameter, the essentials are present. It falls short of complete because no side effects or preconditions for removing a story are described and the stray rules line distracts.

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 100% and the single required id parameter is documented as 'Story ID to remove'. The description adds no format, type, or sourcing detail beyond the schema, so this is the baseline 3.

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: removing a building story, identified by ID. It is clearly distinguishable from draw_add_story, draw_update_story, and draw_list_stories, though it does not explicitly name those siblings. The purpose 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?

There is no when-to-use or when-not-to-use guidance, no prerequisites, and no mention of alternative story tools. The trailing bracketed line appears to be template/rule leakage rather than actionable usage instruction, so it does not compensate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_set_door_paramsDraw set door paramsB
Idempotent

Set default door dimensions [bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
doorWidthNoDoor width (m, default 0.9)
doorHeightNoDoor height (m, default 2.1)

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false (a mutation), idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds the meaningful qualifier "default," indicating these values apply to subsequently created doors rather than an existing one, but says nothing about scope of effect or whether prior doors are updated.

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?

The purpose is front-loaded and the tool name phrasing is efficient, but the appended rule citation is unexplained clutter that a reader cannot decode without the bulc_knowledge_search tool. Half the description is opaque rule metadata rather than actionable content.

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?

With annotations covering mutation/idempotency and full schema coverage for both parameters, the description only needs to convey purpose - which it does. It is minimally adequate, though for a config setter it could say where the defaults take effect.

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 100%; both doorWidth and doorHeight already document units (m) and defaults (0.9, 2.1). The description adds no further parameter meaning, so the baseline 3 applies.

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 ("Set default door dimensions") that clearly distinguishes it from siblings like draw_set_wall_params and draw_set_window_params. The word "default" correctly signals a global config setter rather than a per-door edit, but there is no explicit sibling differentiation in the text itself.

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?

No when-to-use guidance is given. The cryptic rule citation ("[bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search") hints at a related tool but does not explain when this setter should be invoked versus alternatives such as add_door or update_obstacle.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_set_wall_paramsDraw set wall paramsB
Idempotent

Set default wall height and thickness for 2D drawing [bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
wallHeightNoWall height (m, default 3.0)
wallThicknessNoWall thickness (m, default 0.2)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and closed-world, so the safety and idempotency profile is covered. The description adds the crucial scope detail that these are defaults for future drawings, not retroactive edits, but omits any mention of required permissions or what happens to already-drawn walls.

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 core sentence is a tight, front-loaded statement of purpose. The appended rule-reference line is cryptic and arguably noise, but it is short and does not bury the main content.

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?

For a two-param, fully-specified schema with a clear annotation profile, the core description is adequate. What is missing is the scope clarification that these are defaults applied to future drawing operations, plus any explanation of the referenced rules.

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 100%, with both wallHeight and wallThickness documenting units (m) and defaults (3.0, 0.2). The description adds nothing beyond the schema, so baseline 3 applies.

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 (set) and resource (default wall height/thickness for 2D drawing). Distinguishes itself from draw_set_door_params and draw_set_window_params by naming walls explicitly, though it does not call out those siblings.

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?

No when/when-not guidance or mention of alternatives. The trailing '[bulc-mcp rules]' line references EVAC-001 and GEO-002 with a bulc_knowledge_search call suggestion, which is opaque rule jargon rather than actionable usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_set_window_paramsDraw set window paramsB
Idempotent

Set default window dimensions [bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
windowWidthNoWindow width (m, default 1.2)
windowHeightNoWindow height (m, default 1.2)
windowSillHeightNoSill height from floor (m, default 0.9)

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false, readOnlyHint=false, so the safety profile is covered. The word "default" in the description adds the useful behavioral fact that this mutates a persistent default rather than a specific window, but nothing is said about scope of effect or interaction with existing windows.

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?

The core sentence is appropriately terse and front-loaded. However the appended rule-code tag (EVAC-001, GEO-002 with a quoted id) is cryptic noise that consumes space without communicating anything an agent can act on.

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?

For a zero-required-parameter setter with full schema coverage and annotations covering safety and idempotency, the description is minimally viable. It is still missing scope-of-effect and any mention of how these defaults interact with add_window, which is the main behavioral question for this 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 100% and each parameter already documents its unit (m) and default value (1.2/1.2/0.9). The description adds no units, ranges, or semantics beyond the schema, so the baseline 3 applies.

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 clear verb+resource ("Set default window dimensions") that distinguishes it from the sibling draw_set_wall_params / draw_set_door_params family. However it does not clarify whether these defaults apply only to newly drawn windows or retroactively to existing ones, which is the one ambiguity an agent would care about.

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?

No when-to-use, prerequisites, or alternative-selection guidance. The trailing "[bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search" fragment is an opaque cross-reference rather than actionable usage instruction; an agent cannot infer when this tool should be preferred over simply passing dimensions to add_window.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_update_storyDraw update storyB
Idempotent

Update a story name or height [bulc-mcp rules] EVAC-001, GEO-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStory ID
nameNoNew story name
heightNoNew story height (m)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false, openWorldHint=false), so idempotency and non-destructiveness need not be restated. The description adds the partial-update notion ('name or height') but says nothing about behavior if neither field is supplied, invalid heights, or nonexistent IDs.

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 core sentence is a single tight clause with the mutable fields front-loaded. The appended rules tag is terse and occupies little space, though its all-caps rule codes and unquoted id placeholder make it slightly opaque rather than genuinely economical.

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?

For a small mutation tool with full param coverage, no output schema and annotations covering safety, the minimum is met and the return-value burden is low. However, it omits what happens on partial updates or invalid input and leaves the referenced EVAC-001/GEO-002 rules unexplained, so an agent still lacks the operational detail to call it confidently.

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 100%, and the schema already documents id, name and height including units ('Story height (m)'). The description merely echoes the two mutable fields, adding no syntax, range, or default information beyond what the schema provides, so the baseline 3 applies.

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 ('Update a story name or height'), so the agent immediately knows it mutates an existing story's name and/or height. It is clearly differentiated from siblings like draw_add_story, draw_remove_story and draw_list_stories by the field list and the 'update' verb, though those siblings are never named.

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?

There is no explicit statement of when to use this tool versus draw_add_story or draw_set_wall_params, and no note on prerequisites such as existing story IDs. The bracketed rules line points at EVAC-001/GEO-002 via bulc_knowledge_search with the story id, which is an implied compliance step, but it is cryptic and does not say when to run it or what to do with the result.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_add_agentEvac add agentB

Add an evacuation agent at a specific position [bulc-mcp rules] EVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position (m)
yYesY position (m)
maxSpeedNoMax speed (m/s, default 1.8)
floorIndexNoFloor index (0-based)
desiredSpeedNoDesired speed (m/s, default 1.2)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-idempotent, non-open-world write with destructiveHint=false, so the safety profile is covered structurally. The description adds the rule reference (EVAC-001 -> bulc_knowledge_search), which is real behavioral context, but says nothing about what happens on repeated calls, whether the agent needs an existing evac setup, or the units/scoping of position beyond the schema.

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?

Two short lines with the action front-loaded and no padding. The embedded rule pointer is compact, though its terse quoting ('"<id>"') is slightly cryptic and could be mistaken for a parameter.

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?

With no output schema the description need not explain returns, and annotations cover the mutation profile while the schema fully documents parameters. What is missing is the operational context: whether an evacuation setup must pre-exist, and how this differs from the batch/waypoint/stair adders. Adequate but with clear gaps for a write tool in a crowded evac family.

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 100% and every parameter (x, y, maxSpeed, floorIndex, desiredSpeed) carries its own units and defaults, so the schema does the heavy lifting. The description only adds 'at a specific position', which does not extend the schema's meaning. Baseline 3 applies.

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 (add an evacuation agent) plus the scoping detail 'at a specific position', which distinguishes it from the coordinate-free siblings like evac_update_setup or evac_list_summary. It stops short of explicitly naming the closest alternatives (evac_add_agents_batch, evac_add_waypoint), so the agent must infer the single-vs-batch split.

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 evac_add_agents_batch, evac_add_stair, or evac_add_waypoint, and no prerequisites (e.g. that an evacuation setup must exist first). The '[bulc-mcp rules] EVAC-001' pointer is a compliance pointer, not usage guidance for this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_add_agents_batchEvac add agents batchC

Add multiple evacuation agents distributed in a rectangular area [bulc-mcp rules] EVAC-001, EVAC-005 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xMaxYesArea X max (m)
xMinYesArea X min (m)
yMaxYesArea Y max (m)
yMinYesArea Y min (m)
countYesNumber of agents to place
floorIndexNoFloor index (0-based, default 0)
desiredSpeedNoDesired speed for all agents (m/s, default 1.2)

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation/safety profile is covered structurally. The description adds only that agents are distributed over a rectangle; it says nothing about distribution method (random vs. grid), whether existing agents are preserved, units/defaults for speed, or any auth/permission needs.

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?

The core sentence is front-loaded and efficient, but the trailing '[bulc-mcp rules] EVAC-001, EVAC-005 — bulc_knowledge_search "<id>"' line is template-like boilerplate with an unresolved placeholder, adding structural noise rather than value.

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?

For a mutation tool with no output schema and 7 parameters, the description omits key facts an agent needs: how agents are distributed, how count interacts with the area, whether repeated calls accumulate, and default behaviors. The purpose is stated but the definition is not complete enough to call confidently.

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 100%, so every parameter (xMin/xMax/yMin/yMax/count/floorIndex/desiredSpeed) is already documented in the schema; baseline 3 applies. The description's 'rectangular area' phrasing loosely reinforces the min/max bounds but adds no syntax or format detail beyond the schema.

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 gives a specific verb ('Add'), resource ('evacuation agents'), scope ('multiple') and distribution shape ('rectangular area'), which implicitly distinguishes it from the single-agent sibling evac_add_agent. It stops short of naming that sibling explicitly, so 4 rather than 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 when-to-use or when-not-to-use guidance and no comparison to alternatives like evac_add_agent or evac_update_agent. The EVAC-001/EVAC-005 rule pointer hints that a bulk-knowledge lookup may apply, but it never states the conditions under which this tool should be chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_add_journeyEvac add journeyA

Create an evacuation journey (route) with ordered stages. Waypoint ids come from evac_list_summary. End the route with an EXIT stage (it goes to the nearest exit automatically). Floors are joined by stairs automatically — stairs are not journey stages. [bulc-mcp rules] EVAC-006, EVAC-007 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesJourney name
stagesNoOrdered stages (each: {type: "WAYPOINT"|"WAITING_SET"|"QUEUE"|"EXIT", targetId: id of that waypoint/waiting set/queue; omit for EXIT})

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, non-idempotent, non-destructive behavior. The description adds genuinely non-obvious behavioral rules: the EXIT stage auto-routes to the nearest exit, floors are auto-joined by stairs, and stairs must not be modeled as stages. This goes meaningfully beyond annotations, though nothing is said about duplicate handling or prerequisites.

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?

Four short sentences, front-loaded with the core action followed by the tricky rules. The trailing '[bulc-mcp rules] EVAC-006, EVAC-007' reference is a little opaque but directs the agent to enabling documentation, so it earns its place.

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?

For a mutation tool with no output schema and fully documented parameters, the description supplies the domain rules an agent needs to build a valid journey (ordering, EXIT terminator, no stairs). Minor gaps around error/duplicate handling remain.

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 coverage is 100%, so the baseline is 3, but the description compensates for the terse schema by clarifying the semantics of stage types and that targetId is omitted for EXIT and sourced from evac_list_summary for others.

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 and resource ('Create an evacuation journey (route) with ordered stages'), which cleanly separates it from evac_update_journey and evac_remove_journey in the sibling list. An agent knows exactly what object is being created.

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?

Gives concrete construction guidance: where waypoint ids come from (evac_list_summary), how to terminate the route (EXIT stage), and what not to include (stairs). It doesn't explicitly contrast with update/remove siblings, but the create-vs-modify distinction is clear from the name and verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_add_stairEvac add stairB

Add a staircase connecting two floors [bulc-mcp rules] EVAC-001, EVAC-006 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
x1YesStair start X (m)
x2YesStair end X (m)
y1YesStair start Y (m)
y2YesStair end Y (m)
widthCmNoStair width (cm, default 120)
capacityNoMax simultaneous users (default 20)
toFloorIndexYesTarget floor index
fromFloorIndexYesSource floor index

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write (readOnlyHint=false), non-destructive, and non-idempotent, so the safety profile is covered structurally. The description adds only 'connecting two floors' and a pointer to EVAC-001/EVAC-006 compliance rules — no mention of what creation requires, whether it carves an opening, or duplicate-handling, so it adds modest value beyond 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 zero filler. The trailing rule tag is terse and somewhat cryptic, but it does not pad the definition.

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?

For an 8-parameter mutation tool with no output schema, the description is complete enough to attempt the call but omits notable context: coordinate frame for the x/y pairs, whether the stair requires a matching opening, and how capacity/width interact with simulation. Annotations cover the safety side, so this remains merely adequate.

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 100% and every parameter (coordinates, widthCm default 120, capacity default 20, floor indices) is documented in the schema itself. The description adds no coordinate-system, unit, or ordering detail beyond what the schema already provides, so the baseline 3 is appropriate.

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 (add) plus resource (staircase) and scope (connecting two floors), which distinguishes it from evac_update_stair and evac_remove_stair in the sibling set. It does not name those siblings, but the operation 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?

No statement of when to use this versus evac_update_stair/evac_remove_stair, and no prerequisites (e.g., floors must already exist). The only routing aid is the machine-oriented '[bulc-mcp rules] EVAC-001, EVAC-006' tag, which tells the agent to look up rules but not when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_add_waypointEvac add waypointC

Add a navigation waypoint for evacuation routing

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position (m)
yYesY position (m)
radiusNoAttraction radius (m, default 1.0)
floorIndexNoFloor index (default 0)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this is a non-read-only, non-idempotent, non-destructive write, so the safety profile is covered. The description adds nothing beyond restating the add operation — it does not say whether repeated calls create duplicates, whether an identifier is returned for later update/remove, or what the waypoint attaches to.

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 with no filler, front-loading the verb and resource. It is efficient, though arguably under-specified rather than optimally concise for a mutation tool.

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?

For a write tool with no output schema and a crowded evac sibling family, the description does not explain how the added waypoint is later referenced, ordered among other waypoints, or related to journeys and agents. The schema is complete, but the agent lacks the operational context needed to place a waypoint correctly in the workflow.

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 100%, with x, y, radius, and floorIndex each documented including units and defaults, so the schema carries parameter semantics fully. The description adds no coordinate-frame or placement meaning beyond that, which meets the baseline 3 for high coverage.

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 gives a specific verb (Add) and resource (navigation waypoint) with the domain (evacuation routing), so the purpose is immediately clear. However, it does not distinguish this from siblings like evac_update_waypoint or evac_remove_waypoint, leaving the agent to infer the create-vs-modify boundary from names alone.

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 guidance on when to use this versus evac_add_journey, evac_update_waypoint, or evac_add_stair, nor any prerequisites such as needing an existing evacuation setup or journey. The agent gets a purpose but no routing context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_clear_agentsEvac clear agentsB
Destructive

Remove all evacuation agents [bulc-mcp rules] EVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered structurally. The description contributes only the 'all' quantity, without stating whether the wipe is recoverable (e.g., via shape_undo/project_undo) or what state agents are left in.

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?

The operative sentence is a tight imperative with the destructive scope front-loaded. However, the second line is an unformatted rule citation that reads as stray boilerplate and consumes space without aiding invocation.

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?

With no parameters, no output schema, and annotations covering the destructive profile, very little is required of the description. It is minimally sufficient, but a bulk-destructive clear-all tool would benefit from a reversibility or post-state note.

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 there is nothing for the description to disambiguate. Baseline 4 applies for a no-parameter tool.

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 first sentence states a specific verb+resource with scope ('Remove all evacuation agents'), which clearly distinguishes it from the single-agent sibling evac_remove_agent and the additive evac_add_agents_batch. The trailing rules line adds no clarifying purpose but does not obscure the core meaning.

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 indication of when to use this versus evac_remove_agent (single) or evac_remove_stair, nor any note on prerequisites, confirmation, or undo. The appended '[bulc-mcp rules] EVAC-001' reference points at a knowledge-search tool but gives the agent no actionable selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_get_resultsEvac get resultsA
Read-onlyIdempotent

Summary of the last evacuation result in the project (never the raw trajectories): agents, evacuated / remaining, last exit time (the RSET shown in the app), mean and p50/p90/p95 exit times, evacuation start delay from the alarm chain, FED casualties and their causes, and per-exit counts, first/last times and flow (persons/s/m; each agent is assigned to the exit nearest to its last position). detail = summary (default) | exits | agents (agents lists exit times, limit ≤ 500). Read-only. [bulc-mcp rules] GEN-010, ASET-005, EVAC-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
detailNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive/openWorld, so the bar is lower, yet the description adds real value: it explicitly states it never returns raw trajectories, defines the detail modes, and caps agents at limit ≤ 500.

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 and dense with useful specifics in a single sentence; the long parenthetical on per-exit metrics is information-rich rather than filler, though the sentence is on the verge of being run-on.

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 output schema, the description compensates by enumerating the return fields and detail modes, and annotations cover the safety profile. It is complete enough to invoke correctly, missing only explicit guidance on alternatives among the numerous sibling result tools.

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 must carry the load, and it does: 'detail = summary (default) | exits | agents' explains each enum value and the default, and the limit ≤ 500 constraint is stated for the agents mode. The exact meaning of limit in other modes is left implicit.

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 ('Summary of the last evacuation result in the project') and enumerates the exact metrics returned, so an agent knows precisely what comes back. It does not, however, distinguish itself from sibling result tools such as evac_status, fire_results_summary, or the other *_get_results tools.

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 — 'the last evacuation result' suggests calling it after a run, and the 'Read-only' note plus the embedded rule references hint at context, but there is no explicit when-to-use/when-not-to-use or named alternative (e.g. evac_status vs fire_results_summary).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_list_summaryEvac list summaryB
Read-onlyIdempotent

Get current evacuation module status summary (read-only) [bulc-mcp rules] EVAC-001, EVAC-002, EVAC-007 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/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, and the description's '(read-only)' merely restates that. Nothing is added about what the summary contains, whether it is scoped to the whole project or a selection, or how stale the data may be.

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 operative sentence is short and front-loaded with the verb and resource. The bracketed rules line is terse but its purpose is not explained, so it reads as noise to an agent unfamiliar with the bulc convention.

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?

With no output schema and no parameters, the description carries the burden of explaining what the 'summary' returns, and it does not (no fields, no indication of whether it covers agents, journeys, stairs, or all of them). It is minimally sufficient to invoke but not to interpret the result.

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 no parameters, so there are no parameter semantics to document and the baseline is 4. The description correctly implies no input is required.

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 ('Get') and resource ('evacuation module status summary'), so the agent knows it is a read of evacuation state. It does not differentiate itself from the sibling evac_status, which appears to cover overlapping ground, leaving some ambiguity about which summary tool to pick.

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 versus evac_status, evac_get_results, or hvac_list_summary/spr_list_summary. The second line points at rule IDs and bulc_knowledge_search, but that is compliance routing rather than usage guidance for this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_remove_agentEvac remove agentC
Destructive

Remove an evacuation agent by ID [bulc-mcp rules] EVAC-001, EVAC-005 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAgent ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotency, so the safety profile is covered. The description adds essentially nothing beyond that — it does not say whether an unknown ID errors, whether dependent waypoints/journeys are affected, or whether the removal cascades.

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?

The core sentence is tight and front-loaded, but the trailing '[bulc-mcp rules] EVAC-001, EVAC-005 — bulc_knowledge_search "<id>"' fragment is cryptic, of unclear value, and reads like a stray internal note rather than agent-facing guidance.

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?

For a one-parameter destructive delete whose annotations carry the safety hints, the definition is minimally adequate. It stops short of stating failure behavior or side effects, which matters for an irreversible remove operation with no output schema.

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 coverage is 100% and the single 'id' parameter is documented as 'Agent ID to remove'. The description's 'by ID' merely restates the schema, so the baseline 3 for fully-covered schemas applies.

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 ('Remove an evacuation agent') with an ID qualifier, so the action is unambiguous. However it does not distinguish itself from close siblings such as evac_clear_agents or evac_remove_waypoint, so the agent gets no help picking the right removal tool.

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 when-to-use or when-not-to-use guidance, and no condition that selects this over evac_clear_agents (bulk removal) or evac_update_agent. The dangling '[bulc-mcp rules] EVAC-001, EVAC-005' reference is not actionable usage advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_remove_journeyEvac remove journeyC
Destructive

Remove an evacuation journey by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesJourney ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=false, so safety is partly covered. However, the description adds nothing beyond the name: it does not say that removal is permanent, whether referencing agents/waypoints are also affected, or whether confirmation is expected. For an irreversible delete this is a meaningful gap.

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 short, front-loaded sentence with no filler or redundancy. It is efficient, though the brevity borders on under-specification rather than true 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?

For a one-parameter delete with a matching output-less interface and destructive annotations, the definition is minimally sufficient. It still omits side effects of removal and any follow-up step, which an agent would want before calling a destructive 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 coverage is 100% and the single parameter is documented as 'Journey ID to remove'. The description repeats only that it takes an ID, adding no format or lookup guidance beyond the schema, so the baseline 3 applies.

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 (Remove) and resource (evacuation journey) keyed by ID, which is enough to separate it from evac_remove_agent and evac_remove_stair. It stops short of naming any sibling explicitly, so it is clear but not fully differentiated.

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 when-to-use guidance, no mention of the update/list siblings (evac_update_journey, evac_list_summary), and no note about prerequisites such as whether the journey must be unreferenced. The agent must infer everything from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_remove_stairEvac remove stairB
Destructive

Remove a staircase by ID [bulc-mcp rules] EVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStair ID to remove

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is covered structurally. The description adds nothing beyond that, but the malformed reference to EVAC-001 / bulc_knowledge_search hints at an external validation step without explaining it, which is weak added value.

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?

The core sentence is efficiently front-loaded, but the trailing '[bulc-mcp rules] EVAC-001 — bulc_knowledge_search "<id>"' fragment is unexplained, appears malformed, and adds noise rather than value.

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?

For a simple destructive single-parameter tool with a fully documented schema and destructiveHint annotation, the description is minimally adequate. It omits any note about what gets removed, side effects on dependent journeys/agents, or how to recover (undo), which would help for a destructive operation.

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 coverage is 100% and the schema already documents the single 'id' parameter ('Stair ID to remove'), so the description matches rather than adds. Baseline 3 is appropriate when the schema fully documents the parameter.

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 ('Remove a staircase by ID'), which is clear and directly distinguishable from siblings like evac_add_stair and evac_update_stair. It does not explicitly name an alternative, but the purpose 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?

No guidance on when to use this versus alternatives, no prerequisites, and no mention of required state (e.g., staircase must exist, simulation must be stopped). The injected '[bulc-mcp rules]' line references an external rule ID but does not function as usable usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_remove_waypointEvac remove waypointC
Destructive

Remove a waypoint by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWaypoint ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: it does not say whether removal is immediate or staged, whether agents/journeys referencing the waypoint are affected, or whether the operation can be undone (unlike shape_undo/project_undo siblings).

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 with the action and key front-loaded and zero filler. It is efficient, though the extreme brevity leaves no room for the behavioral detail this destructive tool warrants.

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?

For a one-parameter destructive delete with annotations covering reversibility and safety, this is minimally adequate. It still omits side effects on dependent evac objects (agents, journeys, stairs) and whether the call errors when the ID does not exist or succeeds silently.

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?

There is a single parameter at 100% schema description coverage, so the schema fully documents 'id' as the waypoint ID to remove. The description's 'by ID' merely echoes that, adding no format, source, or lookup guidance (e.g., how to obtain valid IDs). Baseline 3 applies.

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 ('Remove a waypoint') with the identity key ('by ID'), which cleanly separates it from evac_add_waypoint and evac_update_waypoint in the sibling set. It never names those siblings explicitly, so it stops short of the top band.

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?

No when-to-use guidance, no prerequisites, and no mention of the add/update counterparts or evac_remove_journey. The agent must infer the usage context entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_runEvac runA

Run the evacuation simulation in the running app after the user agreed (confirm=true): builds the same engine input as the EVAC run dialog (agents, exits = OPEN vents / door items / Door_·Window_ holes, walls, stairs → multi-level mode, waypoints, journeys, FED and alarm settings) and starts the engine in the background. Refuses with no agents, and with no user-defined exits unless allowNoExits=true (the engine would then use temporary exits at the domain edges). Poll evac_status, then read evac_get_results. Live app only. [bulc-mcp] Starts the evacuation engine after the user agreed; outputFolder also writes the result there (EVAC-004). [bulc-mcp rules] EVAC-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesMust be true — the user has agreed to this action
allowNoExitsNoRun even without user-defined exits (default false)
outputFolderNoFolder for the .evac result file (default: the project folder)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic write profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds real behavioral context the annotations cannot: the engine runs in the background (hence polling), specific refusal conditions, the fallback behavior of temporary exits at domain edges when allowNoExits=true, and the side effect of outputFolder writing a .evac file.

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 action and its precondition, and every clause carries information (input composition, refusals, follow-ups). It is, however, one long run-on sentence with a heavy parenthetical, and the trailing '[bulc-mcp rules] EVAC-004 — bulc_knowledge_search' fragment is procedural noise rather than tool guidance.

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 output schema, the description compensates by naming the follow-up tools (evac_status, evac_get_results) an agent must call instead of expecting an inline result. It covers preconditions, failure modes, and side effects; only the return-shape and timing expectations of the background run 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?

Schema coverage is 100%, so the baseline is 3, but the description goes further: it explains what allowNoExits actually changes in the engine (temporary exits at domain edges) and that outputFolder also writes the result there under rule EVAC-004. This adds meaning beyond the terse schema strings.

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 (run) and resource (evacuation simulation) and scopes it to the live app, distinguishing it from the many evac_* configuration tools and from sim_start/run_simulation. It also enumerates what the engine input is built from (agents, exits, walls, stairs, FED, alarm), so an agent knows exactly what this action covers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition (user agreed / confirm=true), explicit when-not conditions (refuses with no agents, and with no user-defined exits unless allowNoExits=true), and routes the agent through the lifecycle afterwards (poll evac_status, then read evac_get_results). The 'Live app only' constraint further narrows applicability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_statusEvac statusB
Read-onlyIdempotent

Status of the current / last evacuation run of this app session: running or finished, percent, last engine message, error, result summary. Read-only. [bulc-mcp rules] EVAC-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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, so the safety/idempotency profile is fully covered. The description's useful addition is that it reports on the 'current/last' run of the session, including error and result summary — a behavioral scope note. It does not say what happens before any run exists.

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?

The status enumeration is front-loaded and dense, but the appended rules fragment ('EVAC-004 — bulc_knowledge_search "<id>"') is unexplained and reads as noise or a dangling reference, weakening structure.

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?

Annotations cover safety and idempotency, and the field list describes the return content despite no output schema. What's missing is the when-to-use routing and any clarification of the EVAC-004 rule pointer, which the description raises but does not explain.

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?

No parameters exist, so per the rubric baseline is 4. Nothing is missing on this dimension.

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 resource (evacuation run status) with clear scope: 'of this app session' and enumerates what the status contains (running/finished, percent, last message, error, result summary). It does not explicitly differentiate from siblings like evac_get_results or sim_status, but the 'app session' scoping and field list make the target reasonably clear.

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?

No guidance on when to use this versus evac_get_results, sim_status, or result_get_state. The trailing '[bulc-mcp rules] EVAC-004 — bulc_knowledge_search "<id>"' fragment reads as a rule pointer without a clear activation condition, leaving the agent to guess the trigger.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_stopEvac stopA
Destructive

Stop the running evacuation simulation (confirm=true). No result is kept. Live app only.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesMust be true — the user has agreed to this action

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and non-idempotent, but the description adds genuinely new context beyond them: results are discarded ("No result is kept") and the operation is restricted to a live application session. It still doesn't say what happens if no simulation is running or whether partial output survives.

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?

Three short clauses, front-loaded with the action, then the required flag, the consequence, and the environment constraint. No filler and nothing that should be dropped.

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?

For a single-parameter, no-output-schema stop tool, the description covers the action, the data-loss consequence, the confirmation requirement, and the execution environment. The only real omission is behavior when no evacuation run is active or when the app is offline.

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?

With one parameter at 100% schema description coverage, the schema already explains confirm in full. The description's "(confirm=true)" restates that same constraint, adding no syntax, default, or failure-mode detail beyond the structured field.

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 ("Stop the running evacuation simulation"), which clearly separates it from evac_run and evac_status. It does not explicitly contrast itself with the near-sibling sim_stop, so the agent must infer the boundary from the evac_ prefix.

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 rather than stated: "Live app only" tells the agent the tool is unusable in a headless/batch context, and (confirm=true) signals the confirmation precondition. There is no explicit when-to-use vs when-not, nor a pointer to sim_stop for non-evacuation runs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_update_agentEvac update agentC
Idempotent

Update properties of an existing evacuation agent [bulc-mcp rules] EVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNew X position (m)
yNoNew Y position (m)
idYesAgent ID
massNoNew mass (kg)
maxSpeedNoNew max speed (m/s)
floorIndexNoNew floor index
desiredSpeedNoNew desired speed (m/s)

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond that: it doesn't say whether this is a partial or full replacement update, whether unspecified fields are preserved, or what validation applies to values like mass or speed. For a mutation tool this is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is appropriately short and front-loaded, but the second line — a dangling '[bulc-mcp rules] EVAC-001 — bulc_knowledge_search "<id>"' fragment — is extraneous and reads like a leaked instruction rather than documentation. That noise costs it points on size and structure.

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?

The schema fully documents all seven parameters and the annotations carry the safety profile, so an agent can invoke the tool. However, the description leaves open whether the update is partial or replacing, and the stray rule line adds confusion rather than completeness. Adequate but with clear remaining gaps.

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 100%, so every parameter (x, y, id, mass, maxSpeed, floorIndex, desiredSpeed) is already documented with units in the schema. The description adds no syntax, range, or constraint detail beyond that, so the baseline of 3 applies.

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 first sentence states a specific verb and resource — 'Update properties of an existing evacuation agent' — which cleanly distinguishes it from siblings like evac_add_agent and evac_remove_agent. It does not enumerate which properties are updatable, but the core purpose is unambiguous. The trailing rule-reference line adds no clarity.

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 explicit when-to-use guidance, no mention of prerequisites, and no named alternative (e.g. use evac_add_agent for new agents, evac_remove_agent to delete). Usage is only implied by the word 'existing'. An agent must infer everything about context from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_update_journeyEvac update journeyB
Idempotent

Update an existing evacuation journey

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesJourney ID
nameNoNew journey name
stagesNoNew stages array ({type, targetId})

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the full safety profile (readOnly=false, idempotent=true, destructive=false, openWorld=false). The description adds nothing beyond them: it does not say whether the stages array replaces existing stages wholesale or merges, nor what happens to fields omitted from the request.

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, front-loaded sentence with no filler. It is efficient, though arguably under-specified rather than genuinely concise given the mutation semantics left unexplained.

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?

Annotations carry the safety profile and the schema fully documents parameters, so the description is not critically deficient. However, for a mutation tool in a dense evac_* family, it omits replacement semantics for stages and any differentiation from evac_update_setup, leaving the agent to infer key behavior.

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 100%, so id, name, and stages are already documented in the schema. The description adds no syntax or semantics beyond that (e.g. replacement behavior for stages), so the baseline of 3 applies.

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 (update) and resource (evacuation journey), which cleanly separates it from evac_add_journey and evac_remove_journey. It does not, however, differentiate itself from other evac_update_* siblings (setup, agent, stair, waypoint) beyond the resource noun.

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?

The word 'existing' weakly implies the journey must already be present and that this is a modification rather than a creation, but there is no explicit when-to-use guidance, no prerequisites (e.g. that an id from evac_add_journey is required), and no routing to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_update_setupEvac update setupB
Idempotent

Update evacuation simulation settings (model, time, timestep)

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoModel: CollisionFreeSpeed | SocialForce | GeneralizedCentrifugal | CollisionFreeSpeedV2
timeStepNoTime step (s)
simulationTimeNoTotal simulation time (s)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, idempotent, non-destructive update, so the safety profile is covered. The description adds the scope of settings but does not disclose partial-update behavior, whether omitted fields are preserved, or any required preconditions.

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?

A single, front-loaded sentence with zero wasted words. It is appropriately sized for a simple settings-update tool.

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?

Given the simple three-parameter schema and existing annotations, the description is minimally adequate. However, it omits whether all parameters are optional and what happens on an empty call, which matters for a partial-update tool with no required fields.

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 100%, so the schema already documents all three parameters, including valid model values and units for timeStep and simulationTime. The description merely lists them informally and adds no syntax or format detail beyond the schema.

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 verb and resource: 'Update evacuation simulation settings', and names the settings (model, time, timestep). This clearly differentiates it from sibling tools like evac_update_agent or evac_update_journey, though it does not explicitly call out 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 guidance on when to use this tool versus alternatives such as set_run_options or set_simulation_mode, nor any preconditions (e.g., simulation must be stopped). The description only restates what can be updated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_update_stairEvac update stairC
Idempotent

Update properties of an existing staircase [bulc-mcp rules] EVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStair ID
x1NoNew stair start X (m)
x2NoNew stair end X (m)
y1NoNew stair start Y (m)
y2NoNew stair end Y (m)
capacityNoNew max simultaneous users
toFloorIndexNoNew target floor index
fromFloorIndexNoNew source floor index

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond the bare purpose: it does not say whether unspecified properties are left untouched (partial update), whether floor indices are validated, or whether the geometry mutation can invalidate waypoints/journeys that reference this stair.

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?

The single purpose sentence is front-loaded and waste-free, which is good. However, the bracketed rules fragment immediately after it is cryptic and not clearly actionable, which harms the otherwise clean structure.

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?

For a mutation tool with full annotation coverage, full schema coverage, and no output schema, the minimum an agent needs is arguably present. What is missing is meaningful context: partial-update semantics, ID discovery (e.g. evac_list_summary), and the intent behind the EVAC-001 rule pointer.

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 100% with units documented for every coordinate ('New stair start X (m)', 'New max simultaneous users'), so the schema carries the parameter burden. The description adds no extra semantics such as which fields are optional or how x1/y1/x2/y2 interrelate, so the baseline 3 applies.

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 clear verb+resource ('Update properties of an existing staircase'), which distinguishes it from evac_add_stair and evac_remove_stair by the name alone. It stops short of describing what kind of properties or the relationship to sibling update tools (evac_update_journey, evac_update_agent), so differentiation is implied rather than stated.

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 when-to-use guidance, no prerequisites (e.g. the stair must already exist, how to obtain a valid stair ID), and no exclusion relative to evac_add_stair. The appended '[bulc-mcp rules] EVAC-001 — bulc_knowledge_search "<id>"' fragment hints at a rule lookup but never says when or why the agent should perform it, so it reads as noise rather than guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evac_update_waypointEvac update waypointC
Idempotent

Update properties of an existing waypoint

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNew X position (m)
yNoNew Y position (m)
idYesWaypoint ID
radiusNoNew attraction radius (m)
floorIndexNoNew floor index
waitingTimeNoNew waiting time (s)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, covering the safety and repeat-call profile. The description adds nothing beyond that – it does not explain partial-update semantics, behavior on an unknown id, or permission requirements. No contradiction with 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 zero filler, opening with the verb. It is efficient, though its brevity arguably reflects underspecification rather than deliberate 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?

For a six-parameter mutation tool with no output schema, the annotations carry the safety profile and the schema carries the fields. Still missing is whether omitted fields are left unchanged and what happens on an invalid id, which an agent needs to call this correctly.

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 100%, so each of the six parameters (x, y, radius, floorIndex, waitingTime, id) is already documented with units in the schema. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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 (Update) and resource (existing waypoint), which is clear enough to distinguish it from evac_add_waypoint and evac_remove_waypoint by name. However, it does not explicitly reference those siblings or clarify its scope against them.

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 when-to-use guidance, no prerequisites, and no mention of alternatives such as evac_add_waypoint or evac_remove_waypoint. The agent must infer that this is the mutation path for an already-existing waypoint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fds_apply_textFds apply textA
Destructive

Apply an edited FDS deck to the project: send the complete .fds text (start from preview_fds, edit, send back). The deck is parsed and compared section by section with the current model; only changed sections (meshes, obstacles, vents, devices, controls, dump …) are applied, untouched sections keep their app metadata (changed sections are replaced by the parsed values). dryRun (default true) only reports the changed sections. sections limits which top-level sections may change. Nothing changes on a parse error. [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoOnly report (default true)
fdsTextYesComplete FDS input text (&HEAD … &TAIL /)
sectionsNoAllowed top-level sections (e.g. ["meshes","mesh","dump"]); default all

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive/non-idempotent, but the description adds substantial behavior beyond them: only changed sections are applied, untouched sections retain app metadata, changed sections are replaced by parsed values, dryRun defaults to true, and nothing changes on a parse error (atomicity). This is exactly the kind of write-operation context annotations cannot express.

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 action and workflow, then mode and filter behavior, with each sentence carrying distinct information (comparison semantics, dryRun, sections, error handling). The trailing [bulc-mcp rules] token injection is extraneous noise but the core text is tight.

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?

For a 3-parameter mutation tool with no output schema and full schema coverage, the description supplies the workflow, the diff semantics, the filter, and the failure mode, so an agent can invoke it correctly. Return-shape detail is not needed given no output schema; remaining gap is only the absence of explicit alternatives to the granular child tools.

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 coverage is 100%, so baseline is 3, but the description adds meaning: dryRun default is true and behaves as a report-only mode, and 'sections limits which top-level sections may change' explains the parameter's effect on the operation rather than just its type.

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 ('Apply') and resource ('edited FDS deck to the project') and describes the exact mechanism: parse the complete .fds text and section-by-section compare with the current model. It also anchors the workflow to the sibling tool preview_fds, so it is distinguishable from the many granular mutation tools (add_obstacle, update_vent, etc.).

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?

Explicitly names the workflow and alternative: 'start from preview_fds, edit, send back', and explains the safe default (dryRun=true reports only). It does not explicitly state when NOT to use this bulk path versus the granular per-object siblings, but the intended context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fire_compute_asetFire compute asetA
Read-onlyIdempotent

Available safe egress time (ASET) at breathing height: for each point (default: every user exit — OPEN vents, door items, Door_/Window_ holes) the time series at floor + samplingHeight (default 1.8 m) is read from horizontal slices (preferred) or Plot3D and compared with the criteria (default temperature 60 °C, visibility 5 m, CO 1,400 ppm, O2 15 %, CO2 5 %; same as the app ASET report). Returns ASET per point, the governing criterion, a lower bound when no criterion is exceeded, and which quantities are missing (then add output_add_tenability_slices and re-run). points[].floorZ = floor elevation of that point (or story = story id). Read-only. [bulc-mcp rules] GEN-010, ASET-001, ASET-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
pointsNo
sourceNoData source (default auto: slices, then Plot3D)
fdsPathNoAbsolute .fds path (default: the project deck / last run)
criteriaNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, but the description adds real behavioral context beyond them: what is returned (ASET per point, governing criterion, a lower bound when nothing is exceeded, which quantities are missing), the source fallback logic, and the remediation path. It stops short of stating return units or the cost/method of the slice read.

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 computation and defaults, then return semantics, then the missing-data remediation. It is dense with nested parentheticals, but each clause carries distinct information (defaults, point derivation, rule IDs) rather than restating the name.

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?

For a complex, nested-object tool with no output schema, the description covers defaults, return content, fallback behavior, and a remediation loop, and points to bulc rule IDs. It would be fully complete with the ASET time unit and explicit sibling contrast, but nothing essential to a correct call is missing.

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?

With 50% schema coverage, the description compensates substantially: it defines the points default (every user exit) and the floorZ/story meaning, restates the criteria defaults and samplingHeight, and explains the source auto-preference (slices, then Plot3D). This adds meaning beyond the schema's enum and field descriptions, though fdsPath defaulting is left to the schema.

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 (compute) and resource (ASET at breathing height) with the governing physics (floor + samplingHeight, slices vs Plot3D, criteria set). It is clearly distinguishable from siblings like fire_results_summary and fire_timeseries, which summarize or export results rather than derive an egress-time metric.

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?

Gives explicit conditional routing: if required quantities are missing, add output_add_tenability_slices and re-run, and it names the default point source (user exits, OPEN vents, door items, Door_/Window_ holes). It does not, however, contrast itself against fire_timeseries or fire_results_summary, so the when-to-use-this-vs-that is only partially covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fire_results_summaryFire results summaryA
Read-onlyIdempotent

Summarise a finished (or running) fire simulation from its result files: peak HRR and time, total heat released (MJ), radiative fraction, last simulated time vs T_END, every device column (max, time of max, final, unit), first time each device with a setpoint reached it, sprinkler / detector activation times from the engine log of this session, and the available output files. Read-only. [bulc-mcp rules] FIRE-001, GEN-010, ASET-005 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
fdsPathNoAbsolute .fds path (default: the project deck / last run)
maxDevicesNoDevice rows to return (default 60)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the redundant 'Read-only' adds nothing. What does add value is the disclosure of data provenance — result files plus 'the engine log of this session' — and that it works on both finished and still-running simulations, which tells the agent the scope and freshness of the returned data.

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?

Effectively one front-loaded sentence that leads with the verb and object, then lists outputs — no wasted preamble. The trailing '[bulc-mcp rules] ...' footer is a clipped metadata injection that interrupts the flow rather than earning its place in the description prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the full burden of describing return contents — and it does so exhaustively, covering scalar metrics, per-device columns, activation times and available output files. For a two-parameter, read-only summarizer this leaves nothing an agent would need unexplained.

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 coverage is 100%, with fdsPath and maxDevices both documented in the schema, so the baseline is 3. The description mentions 'every device column' (loosely implying the maxDevices cap) but adds no syntax, path-format or default guidance beyond what the schema already provides.

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?

The description states a precise verb (summarise) plus the exact resource (result files of a fire simulation) and then enumerates the concrete quantities returned — peak HRR and its time, total heat released, radiative fraction, simulated time vs T_END, per-device maxima, setpoint crossings, sprinkler/detector activation. This level of specificity clearly separates it from neighbours such as get_simulation_metrics, fire_timeseries, spr_get_results and results_detect.

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?

It implies the context ('a finished (or running) fire simulation') and appends a rule reference pointing to bulc_knowledge_search, but it never states explicitly when to reach for this tool versus get_simulation_metrics, fire_timeseries, or spr_get_results. Usage must be inferred from the content list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fire_timeseriesFire timeseriesA
Read-onlyIdempotent

Time series from the result CSV files: file = hrr (HRR, Q_RADI, MLR …) | devc (device ids) | ctrl. columns = column names (default the first 6). t0 / t1 limit the time window; maxPoints ≤ 500 (default 300 — longer series are reduced by time-averaging). Read-only. [bulc-mcp rules] FIRE-001, GEN-010 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
t0No
t1No
fileYes
columnsNo
fdsPathNoAbsolute .fds path (default: the project deck / last run)
maxPointsNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/openWorldHint/idempotent/destructive, so the description's re-statement of 'Read-only' earns nothing. It does add genuine behavior beyond that: maxPoints caps at 500, defaults to 300, and longer series are silently reduced by time-averaging — an important disclosure that output may be downsampled. The listed bulc rules also hint at governance to consult.

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?

Dense, front-loaded, and compressed with pipe/enum notation, so nearly every clause carries information. The trailing '[bulc-mcp rules]' line is cryptic but short, and no sentence is wasted.

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?

For a 6-param read tool with no output schema, the description covers source selection, column selection, time window, and downsampling behavior well enough to call it correctly. It stops short of describing the return shape or how it relates to the summary/detect siblings.

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 only 17%, so the description must compensate, and it largely does: it decodes the file enum (hrr→HRR/Q_RADI/MLR, devc→device ids, ctrl), explains columns (default first 6), the t0/t1 window, and maxPoints cap/default. Only fdsPath is unexplained here, though it carries a schema description of its own.

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 resource ('time series from the result CSV files') and enumerates the three sources (hrr/devc/ctrl) with what each contains, so an agent understands the deliverable precisely. It does not, however, contrast itself with siblings like fire_results_summary or result_get_state, so the differentiation rests on the reader.

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 explicit when-to-use or when-not-to-use statement, and no alternative tool is named, even though fire_results_summary and results_detect are natural candidates. The parameter meanings implicitly signal 'extract data after a run,' but tool-selection guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_config_summaryGet config summaryB
Read-onlyIdempotent

Get a summary of the current FDS configuration: domain size, cell count, number of objects, etc. [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered. The description adds the returned content (domain size, cell count, object count), which is genuine context, but nothing about cost, caching, or preconditions.

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?

The core sentence is tight and front-loaded, but the appended rule fragment ("[bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search \"<id>\"") is cryptic noise that does not help selection or invocation.

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?

For a zero-parameter, read-only summary tool with no output schema, the description adequately conveys what the agent gets back. The only shortfall is the absence of routing guidance against similar summary tools.

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 per the rubric. There are no parameter semantics to document, and the description correctly avoids inventing any.

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 ("Get a summary of the current FDS configuration") and enumerates what is summarized (domain size, cell count, object count). It is clear on its own, though it does not distinguish itself from nearby siblings such as get_project_summary or get_simulation_metrics.

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 versus alternatives like get_project_summary or get_simulation_settings. The trailing rule reference (GEN-006 etc.) is a compliance pointer, not usage guidance for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_conventionsGet conventionsA
Read-onlyIdempotent

Units, coordinate axes, story / floorIndex numbering, id rules and file conventions used by the BULC tools (they differ between modules — read this before building a model from a drawing). topic = units | coordinates | floors | ids | files | aset | all (default all). Read-only. [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the "Read-only" sentence is redundant. The genuinely additive disclosure is that conventions differ between modules — non-obvious context an agent would otherwise not have.

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?

Two dense front-loaded sentences that earn their place, followed by a cryptic bracketed rules footer (GEN-006/010/016) whose meaning is opaque without external context. Minor waste, otherwise efficient.

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?

No output schema exists, so the description must stand in for it; it scopes the covered content well but does not hint at the return shape or size. Adequate for a single-param read-only knowledge lookup.

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 must carry the burden. It enumerates all seven enum values (units, coordinates, floors, ids, files, aset, all) and adds the default of "all", which the schema does not state.

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+resource (get conventions) and enumerates exactly what conventions are covered: units, coordinate axes, story/floorIndex numbering, id rules, file conventions. No sibling tool does anything comparable, so it is trivially distinguishable.

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?

"read this before building a model from a drawing" gives an explicit usage trigger, and the description points at bulc_knowledge_search for rule lookups. No when-not-to-use guidance is given, but the positive context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_furniture_infoGet furniture infoA
Read-onlyIdempotent

Get detailed information about a specific furniture item (dimensions, fire data, fuel)

ParametersJSON Schema
NameRequiredDescriptionDefault
furniture_idYesFurniture ID (e.g. single_bed, sofa_3seat)

TDQS

A3.5/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 covered. The description adds the useful detail that results contain fire data and fuel (not just geometry), but says nothing about behavior on an unknown furniture_id or whether results are cached/static catalog data.

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 short, front-loaded sentence with no filler, and the parenthetical payload list is informative rather than redundant. It is efficient, though it stops short of the routing sentence that would have made it maximally useful.

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?

For a single-input read tool with full annotations and no output schema, the description is nearly complete: it identifies the resource and sketches the returned fields. Adding the lookup prerequisite (from list_furniture_catalog) would close the remaining gap.

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 100% and the single param already carries examples ('single_bed', 'sofa_3seat'), so the schema does the heavy lifting. The description adds no format or validity detail beyond what the schema provides; baseline 3 applies.

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 ('Get detailed information') and resource ('a specific furniture item') and even enumerates the payload (dimensions, fire data, fuel), so an agent knows exactly what comes back. It does not explicitly name the sibling list_furniture_catalog, so the differentiation from the catalog tool is only implied.

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?

The singular 'a specific furniture item' implies this is the drill-down counterpart to list_furniture_catalog, but the description never states when to use it versus the catalog or that an ID must be obtained first. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_numericsGet numericsB
Read-onlyIdempotent

Read the current numerical stability settings (time step, CFL/VN limits, flux limiter). [bulc-mcp rules] GEN-016, SIM-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds value by naming the specific settings returned, but says nothing about return shape or formatting, so it does not go far 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?

Front-loaded with the verb and resource, followed by the concrete fields in parentheses. The trailing rule-reference string is somewhat cryptic but adds a pointer rather than padding.

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 output schema, the description partly compensates by listing the returned settings, which tells the agent what to expect. It stops short of describing the full return structure, but for a zero-parameter read tool it is largely sufficient.

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 per the rubric the baseline is 4. There is nothing for the description to disambiguate on the input side.

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 ("Read") and resource ("current numerical stability settings") and enumerates the concrete fields (time step, CFL/VN limits, flux limiter). It is clearly the read counterpart to the sibling set_numerics, though it doesn't explicitly contrast itself with get_simulation_settings or list_raw_namelists.

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 provides no when-to-use guidance or exclusions; it only states what is read. The rule reference (GEN-016, SIM-002) points to a knowledge base but does not tell the agent when to prefer this tool over set_numerics or get_simulation_settings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_object_propertiesGet object propertiesB
Read-onlyIdempotent

Get one obstacle's full properties as JSON, including ALL Runtime FDS Properties (fds_override: fire HRRPUA/ramp, detector activation_temp/RTI, sprinkler k_factor/flow, HVAC airflow, fuel/REAC yields, etc.). [bulc-mcp rules] GEN-001, GEN-003, GEO-011 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesObstacle ID

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already fully declare the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's added value is its disclosure of return format (JSON) and content scope. It usefully signals that runtime FDS overrides are included, but gives no error behavior or structure detail.

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?

The first sentence is efficient and front-loaded, but the second bracketed rule-reference line is cryptic ('GEN-001, GEN-003, GEO-011' with no explanation) and does not earn its place as prose for the calling agent.

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?

For a read-only single-object getter with full annotation coverage and no output schema, the description is adequate: it says what is returned and in what format. It is missing guidance on error cases (invalid id) and remains cluttered by the unexplained rules pointer.

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 coverage is 100% with the single 'id' parameter documented as 'Obstacle ID'. The description adds nothing beyond the schema, so the baseline of 3 applies.

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 (get one obstacle's full properties) plus the return format (JSON) and scope (all Runtime FDS Properties). It implicitly distinguishes itself from list_obstacles, but does not explicitly name an alternative to route against.

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 explicit statement of when to use this versus update_obstacle, list_obstacles, or shape_get_item_fds_props. The trailing '[bulc-mcp rules]' line points at bulc_knowledge_search, which is a reference to rules, not usage guidance for this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_summaryProject summaryA
Read-onlyIdempotent

Short summary of the project currently open in the BULC app: CHID, title, end time, mesh, and object counts (obstacles, fire sources, vents, devices, evacuation agents, sprinkler heads, HVAC terminals). Needs the app. On BULC 0.90+ project_info gives more (file path, unsaved changes, stories, deck path). 현재 앱 프로젝트 요약입니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. Beyond that the description adds real value: the app-connection prerequisite and version-dependent behavior relative to project_info. It doesn't mention result format or failure behavior when no project is open, which keeps it from a 5.

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 and the field list, then the project_info comparison and prerequisite. The trailing Korean sentence merely restates the purpose in another language and adds no new information for a non-Korean reader, a minor redundancy.

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 output schema, the description usefully enumerates the returned fields and notes the app dependency and version behavior, which is most of what an agent needs. Minor gaps remain: no indication of what happens when no project is open or the app is unavailable.

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 no parameter semantics to clarify and the description correctly does not invent any.

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+resource ('Short summary of the project currently open in the BULC app') and then enumerates exactly what the summary contains: CHID, title, end time, mesh, and object counts. It also explicitly distinguishes itself from the sibling project_info, so an agent can tell the two apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative tool ('project_info') and the exact condition that selects it ('On BULC 0.90+ project_info gives more... file path, unsaved changes, stories, deck path'), which is a clear when-to-use-this-vs-that rule. It also states the prerequisite 'Needs the app', so the agent knows the required runtime context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_simulation_metricsGet simulation metricsA
Read-onlyIdempotent

Get LIVE simulation runtime metrics if a simulation is running: HRR(qdot, kW), Tmax(K), max velocities(umax/wmax), pmax, dt/cfl, step/time, nan count, ms/step, particles, GPU VRAM. Only meaningful in live mode with a running simulation. [bulc-mcp rules] GEN-010, GEN-016, SIM-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description adds the key behavioral constraint that the tool is only meaningful in live mode with a running simulation, but does not say what is returned (or raised) when no simulation is running.

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?

Front-loaded with the core purpose and the live-mode caveat is well placed, and the metric list is genuinely useful given there is no output schema. However the trailing '[bulc-mcp rules] GEN-010, GEN-016, SIM-002 — bulc_knowledge_search' block is opaque boilerplate that adds clutter without aiding invocation.

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 output schema, the description usefully enumerates the returned metrics in place of one. It is nearly complete for a zero-argument read tool, missing only the failure/empty behavior when no simulation is active.

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 schema carries nothing to explain and the baseline is 4. The field list in the description describes return payload, not inputs, so it adds no parameter semantics — but none are needed.

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 + resource (get LIVE simulation runtime metrics) and enumerates exactly which runtime quantities come back (HRR, Tmax, velocities, dt/cfl, ms/step, VRAM). An agent can distinguish it from sim_status, sim_log_tail, or fire_results_summary without opening any schema.

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?

Gives a clear precondition — 'if a simulation is running' and 'only meaningful in live mode' — which tells the agent when the call is valid. It stops short of naming alternatives (sim_status, sim_log_tail) for the non-live case, so no explicit when-not routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_simulation_settingsGet simulation settingsA
Read-onlyIdempotent

Read every simulation setting in one call: time (T_BEGIN/T_END), SIMULATION_MODE, turbulence model, numerics (DT/CFL/VN/flux limiter), ambient &MISC values, output dump intervals and Plot3D quantities, and the mesh deck size. Use it before changing settings so you know what is already explicit. [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds the useful scope detail that it returns the full settings snapshot (including mesh deck size and dump config) rather than a subset, which is behavioral context beyond annotations. It does not describe output structure, defaults, or how missing values are represented, so it adds value but not richly.

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 payload contents in one dense sentence, then a short usage sentence. The trailing '[bulc-mcp rules] GEN-006, GEN-010, GEN-016' tag is minor noise for a read-only getter, keeping it just below top marks.

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 output schema, the description partially compensates by enumerating the returned settings categories, which is exactly what an agent needs to know before deciding to call it. Annotations fully cover safety. Only the exact return format/nesting is unspecified, a minor gap for a zero-arg getter.

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 input schema has zero parameters, so per the rules the baseline is 4. There is nothing for the description to disambiguate, and it correctly implies the tool is argument-free by framing it as a single read call.

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?

Specific verb (Read) plus a precise resource (every simulation setting) with an explicit enumeration of what is covered: time, SIMULATION_MODE, turbulence, numerics, ambient/MISC, dump intervals/Plot3D, mesh deck size. This lets an agent distinguish it from narrower siblings like get_numerics or list_raw_namelists without opening any schema.

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?

Explicitly states when to use it: 'Use it before changing settings so you know what is already explicit.' That is a clear context. It does not name alternative readers (get_numerics, get_config_summary, list_raw_namelists) or say when not to use it, so it stops short of the top tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_add_air_handlerHvac add air handlerA

Add an air handler unit (AHU) to an existing fan node

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesFan node ID
fanTypeNoType: supply | exhaust | return
maxAirflowCFMNoMax airflow (CFM, default 2000)
staticPressurePaNoStatic pressure (Pa, default 500)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the description is not required to re-establish that this writes data. It adds one real piece of context — the fan node must already exist — but says nothing about the effect of the non-idempotent flag (e.g., that repeated calls create additional handlers) or what the call returns.

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?

One short sentence carrying the verb, resource, and attachment point, with no filler or repetition of the title. Appropriately sized for a low-complexity add operation.

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?

With no output schema, the description should ideally say what a successful call yields (e.g., the created air handler id/handle), and it does not. Annotations plus the fully documented schema cover parameters and safety, so the definition is callable, but the return contract and failure behavior remain unaddressed.

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 100%: nodeId, fanType, maxAirflowCFM and staticPressurePa are all documented in-schema including defaults. The description's only contribution is clarifying that nodeId refers to a fan node, which the schema already states ('Fan node ID'), so baseline 3 is appropriate.

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 pairs a specific verb ('Add') with a specific resource ('air handler unit (AHU)') and scopes the target ('to an existing fan node'), which clearly separates it from hvac_add_node, hvac_add_duct, or hvac_update_air_handler. It stops short of explicitly naming a sibling to distinguish itself from, which is the only thing keeping it out of the top band.

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?

The phrase 'to an existing fan node' implies the prerequisite that a fan node must already exist before calling this, which is genuinely useful usage context. However, there is no statement of when to choose this over hvac_update_air_handler, no note on whether duplicate air handlers per node are permitted, and no exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_add_ductHvac add ductC

Connect two HVAC nodes with a duct

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoWidth (mm, for rectangular)
heightNoHeight (mm, for rectangular)
diameterNoDiameter (mm, for circular)
materialNoMaterial: galvanized_steel | stainless_steel | aluminum | flexible
ductShapeNoShape: circular | rectangular
endNodeIdYesEnd node ID
startNodeIdYesStart node ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false, and the description neither contradicts nor meaningfully extends them. It adds nothing about failure modes (missing/nonexistent node IDs), whether adding a duplicate connection is rejected, or whether the duct is validated against node geometry — real gaps for a non-idempotent mutation.

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, front-loaded sentence with no filler; the core action is stated immediately. It is arguably under-sized for a seven-parameter mutation, but there is no wasted text.

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?

For a seven-parameter, non-idempotent create operation with no output schema and no explanatory annotations beyond safety hints, the description omits prerequisites, shape-dependent parameter rules, defaults, and error behavior. It is adequate as a one-line summary but incomplete for correct invocation.

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 100%, so the schema already documents all seven parameters including units and the material/shape vocabularies. The description adds no parameter-level meaning (e.g., that width/height apply only to rectangular and diameter only to circular), so the baseline 3 is correct.

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: connect two HVAC nodes with a duct. An agent can distinguish this create operation from hvac_update_duct and hvac_remove_duct by the verb alone, though the description never explicitly names those siblings or notes the directionality semantics (startNodeId -> endNodeId).

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?

No when-to-use guidance, no prerequisites (do the referenced nodes already have to exist? must they be the same system/level?), and no mention of alternatives like hvac_update_duct for modifying an existing duct. The agent is left to infer all of this.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_add_exhaust_grilleHvac add exhaust grilleB

Add an exhaust grille to an existing exhaust node [bulc-mcp rules] HVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesExhaust node ID
airflowCFMNoAirflow (CFM, default 200)
grilleTypeNoType: louvered | perforated | egg_crate | bar

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose non-read-only, non-idempotent, non-destructive, non-open-world behavior, so the safety profile is covered structurally. The description adds the useful precondition that the parent exhaust node must already exist, but says nothing about failure behavior, whether repeated adds duplicate grilles (non-idempotent), or what the rule reference actually enforces.

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 core sentence is tight and front-loaded, with the parent-node constraint in the first clause. The trailing bracketed rule citation is opaque and slightly clutter, but overall it is appropriately sized for a three-parameter mutation.

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?

For a simple add operation with full schema coverage and annotations, the essentials are present, and no output schema is needed. However, the meaning of the 'bulc-mcp rules HVAC-001' reference and the consequences of adding a grille (e.g., effect on airflow balance, non-idempotency) are left unexplained.

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 100%, so nodeId, airflowCFM (default 200), and grilleType (with its four allowed values) are already documented in the schema. The description adds no format, ordering, or default details beyond that, so the baseline 3 applies.

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 gives a specific verb and resource ('Add an exhaust grille') plus a required precondition ('to an existing exhaust node'), which naturally separates it from hvac_add_supply_diffuser and hvac_update_exhaust_grille. It never names a sibling or alternative explicitly, so it stays at a clear-but-undifferentiated 4.

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 guidance on when to choose this tool versus hvac_update_exhaust_grille, hvac_add_duct, or hvac_add_supply_diffuser. The bracketed 'bulc-mcp rules HVAC-001 — bulc_knowledge_search' note hints that a rule lookup is expected first, but it is cryptic and never states the condition or the required ordering in plain terms.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_add_nodeHvac add nodeA

Add an HVAC node (junction, supply_diffuser, exhaust_grille, or fan) [bulc-mcp] Give heads / terminals a unique label (H1, H2 …, EX1 …): it becomes the FDS id after *_apply_to_fds (GEN-021). [bulc-mcp rules] EVAC-001, GEN-021 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position (m)
yYesY position (m)
zNoZ position (m, default 3.0)
typeYesNode type: junction | supply_diffuser | exhaust_grille | fan
labelNoOptional label
floorIndexNoFloor index (default 0)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly=false, destructive=false, idempotent=false), so the bar is lower, and the description still adds real behavior: the label becomes the FDS id after *_apply_to_fds. That downstream identity effect is exactly the kind of non-obvious behavior an agent needs and is not derivable from annotations.

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?

The purpose sentence is correctly front-loaded, but the description is cluttered with bracketed rule tags ('[bulc-mcp]', '[bulc-mcp rules] EVAC-001, GEN-021') and an embedded tool-call instruction that reads as machine-generated noise. The useful content survives, but it is not cleanly structured.

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?

For a 6-parameter mutation tool with no output schema, the description covers purpose, node types, and labeling convention but omits prerequisites, whether the node must belong to an existing network, and what a successful call returns. Nothing is actively misleading, but a few gaps remain against the tool's complexity.

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 coverage is 100%, so the baseline is 3, but the description adds genuine meaning for the 'label' parameter beyond the schema's terse 'Optional label' — uniqueness convention (H1, H2, EX1) and its role as the eventual FDS id. Positional parameters add nothing, which is fine since the schema documents them fully.

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 ('Add an HVAC node') and enumerates the four node types it accepts, which is concrete and unambiguous. It does not, however, disambiguate itself from the highly overlapping siblings hvac_add_supply_diffuser and hvac_add_exhaust_grille, which create the same node types this tool lists.

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?

The description implies usage through operational notes (give terminals a unique label, consult rules GEN-021/EVAC-001), which is useful context. It never states explicitly when to use this tool versus the type-specific hvac_add_* siblings, so tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_add_supply_diffuserHvac add supply diffuserB

Add a supply diffuser to an existing supply node [bulc-mcp rules] HVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesSupply node ID
airflowCFMNoAirflow (CFM, default 200)
supplyTempCNoSupply temperature (C, default 20)
diffuserTypeNoType: square | round | linear | slot

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the safety burden is largely covered. The description adds the prerequisite that the supply node must already exist, but carries no information on failure behavior, side effects, or the actual content of the referenced 'HVAC-001' rule, which is only a dangling pointer.

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?

The core sentence is front-loaded and efficient, but the trailing fragment '[bulc-mcp rules] HVAC-001 — bulc_knowledge_search "<id>"' is an incomplete, noisy reference with a placeholder that adds confusion rather than value and drags down an otherwise tight one-liner.

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?

For a simple 4-parameter create operation with annotations and a fully documented schema, the description is minimally adequate. However, the partially-formed rule pointer and the absence of any statement about what the operation returns or how it fails leave small but real gaps.

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 100%, so every parameter (nodeId, airflowCFM, supplyTempC, diffuserType) including defaults and the type list is already documented in the schema. The description adds no supplemental meaning about parameter formats or interactions, so the baseline of 3 applies.

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 ('Add a supply diffuser') and its anchor ('to an existing supply node'), which clearly separates it from sibling mutations like hvac_update_supply_diffuser, hvac_remove_supply_diffuser, and hvac_add_exhaust_grille. It is clear but does not explicitly contrast itself with those siblings in text.

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?

The phrase 'to an existing supply node' implicitly establishes a prerequisite (a supply node must exist), but there is no explicit when/when-not guidance or pointer to an alternative tool. Usage must be inferred from the resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_apply_to_fdsHvac apply to fdsA

Apply the HVAC duct network to the FDS model: every supply_diffuser / exhaust_grille node becomes a small HVAC obstacle whose bottom face blows (SUPPLY) or sucks (EXHAUST) the terminal airflow. Uses the flow from hvac_run_calc when available, otherwise the design CFM of the diffuser/grille. Re-running replaces the previous ones. [bulc-mcp rules] HVAC-001, GEN-021, HVAC-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by disclosing the replacement semantics ("Re-running replaces the previous ones"), the data-source fallback chain, and the rule IDs governing it. That answers the main agent question—does re-running duplicate HVAC obstacles?—which annotations alone do not. It is worth noting the replace-on-rerun behavior sits in mild tension with idempotentHint=false and destructiveHint=false, though not enough for a hard contradiction since the flow values themselves can change between runs.

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?

Two dense sentences that front-load the action and then the mechanism, followed by the flow-source and re-run caveats—each clause carries information. The trailing rules line ([bulc-mcp rules] HVAC-001, GEN-021, HVAC-003 with the bulc_knowledge_search hint) is slightly noisy bookkeeping but is operationally usable rather than filler.

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?

For a zero-parameter mutation with no output schema, the description covers what is created, where the flow values come from, and what re-running does—the essentials needed to invoke it correctly. It does not say what happens if no diffusers/grilles exist or how failures surface, but those are secondary gaps rather than blockers.

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 per the rubric the baseline is 4; there is nothing for the description to clarify beyond what an empty schema already conveys. No parameter detail is omitted because none exists.

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 and resource ("Apply the HVAC duct network to the FDS model") and describes the concrete transformation: each supply_diffuser/exhaust_grille becomes a small HVAC obstacle whose bottom face blows or sucks terminal airflow. This clearly distinguishes it from siblings like hvac_run_calc (computation) and hvac_add_supply_diffuser (authoring), which an agent could otherwise confuse with it.

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?

Gives ordering context by naming the upstream dependency: flow comes from hvac_run_calc "when available, otherwise the design CFM," so the agent knows a prior calc is preferred but not mandatory. It does not state when not to use it, nor point at alternatives such as spr_apply_to_fds for the sprinkler analogue, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_get_resultsHvac get resultsA
Read-onlyIdempotent

Get HVAC airflow calculation results (run hvac_run_calc first): total supply/exhaust flow, duct velocity / terminal flow ranges. [bulc-mcp rules] HVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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 the safety profile is covered. The description adds the state dependency on hvac_run_calc and the shape of the returned data, but says nothing about error behavior when no calculation has been run. 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core sentence is tight and front-loaded, but the appended '[bulc-mcp rules] HVAC-001 — bulc_knowledge_search "<id>"' is a templated artifact that does not earn its place and interrupts an otherwise clean definition.

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 output schema, the description usefully compensates by enumerating the result fields returned, and it documents the prerequisite call. Only the absence of failure-mode behavior (e.g., what happens before hvac_run_calc) leaves a minor gap.

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 per the rubric. The description correctly implies a parameterless 'fetch the current results' call and adds no misleading parameter claims.

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 ('Get HVAC airflow calculation results') and enumerates the returned quantities (supply/exhaust flow, duct velocity, terminal flow ranges). It also distinguishes itself from hvac_run_calc by naming it as the prerequisite. The trailing '[bulc-mcp rules] HVAC-001' fragment adds noise rather than clarity, keeping it just short of 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the ordering constraint '(run hvac_run_calc first)', which is the key usage condition for this tool. It does not, however, distinguish itself from other result-style siblings such as hvac_list_summary or spr_get_results, so the routing guidance is partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_list_summaryHvac list summaryA
Read-onlyIdempotent

Get current HVAC network status summary (read-only) [bulc-mcp rules] HVAC-001, GEN-008, GEN-021 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the description's '(read-only)' adds nothing new. The bulc rules pointer is genuine added context (governance/compliance rules and a knowledge-search escape hatch), but the description never says what the summary contains or how fresh/streamed the status is, so it stops short of rich behavioral disclosure.

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?

Two short lines with the purpose front-loaded and no padding. The rules line is cryptic but serves as a compact cross-reference rather than filler, so the text is efficiently sized.

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?

With no output schema, the description carries the burden of conveying what comes back, and 'status summary' is left undefined — an agent cannot tell whether it returns counts, per-node detail, or connection health. Annotations cover the safety profile and there are no parameters to document, but the return-shape gap keeps this at minimum-viable.

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 schema has zero parameters at 100% coverage, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description correctly implies a no-argument call, matching the empty input schema.

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: 'Get current HVAC network status summary'. This distinguishes it from the sibling mutation tools (hvac_update_*, hvac_remove_*) and from the more detailed hvac_get_results, since it is explicitly a summary read. It does not, however, explicitly contrast itself with hvac_get_results or spr_list_summary, so it falls short of 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the word 'summary' and the '(read-only)' tag; there is no statement of when to call this versus hvac_get_results or the other list_* status tools. The rule reference (HVAC-001, GEN-008, GEN-021) hints that a knowledge lookup is expected before or after, but no condition for invoking the tool is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_remove_air_handlerHvac remove air handlerC
Destructive

Remove an air handler unit by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAir handler ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say whether attached ducts/diffusers are cascaded, whether removal can be undone, or what happens if the ID is invalid.

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 with the action and keying parameter front-loaded and no filler. It is terse to the point of being thin, but nothing is wasted.

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?

For a destructive, non-idempotent mutation with no output schema, the description should explain cascade behavior, reversibility, and prerequisites. It covers none of these, leaving the agent to guess at the consequences of the call.

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?

Only one parameter at 100% schema description coverage, so the schema already fully documents the 'id' field. The description's 'by ID' phrasing merely restates it, adding no format, prefix, or lookup details.

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 ('Remove an air handler unit by ID'), which is unambiguous on its own. However, it offers no differentiation from the many adjacent hvac_remove_node / hvac_remove_duct siblings or the hvac_update_air_handler counterpart.

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 guidance on when to use this versus hvac_remove_node or hvac_update_air_handler, no stated prerequisites (e.g., that the handler must exist or that it should be disconnected from ducts first), and no warning that the action is irreversible.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_remove_ductHvac remove ductC
Destructive

Remove a duct connection by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDuct ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds only 'by ID' and says nothing about side effects, such as whether removing a duct orphans connected nodes or cascades to downstream network elements.

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 short sentence with the operation front-loaded and no filler. It is appropriately sized for a single-parameter delete, though it is perhaps too terse to carry much informational weight.

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?

For a simple remove-by-ID tool with full schema coverage and an explicit destructiveHint, the description is minimally sufficient. It leaves minor gaps around side effects and the broader HVAC workflow, but the annotations and schema carry most of the load.

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 coverage is 100% and the single 'id' parameter is fully documented in the schema. The description reinforces 'by ID' but adds no format, validation, or sourcing detail beyond what the schema already provides, so baseline 3 applies.

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 (remove) and resource (duct connection) with the lookup key (ID). It is clearly distinguishable from siblings like hvac_add_duct and hvac_update_duct, though it does not name any sibling 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 guidance on when to use this rather than hvac_update_duct, hvac_remove_node, or the higher-level hvac_apply_to_fds workflow, and no prerequisites or conditions are stated. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_remove_exhaust_grilleHvac remove exhaust grilleC
Destructive

Remove an exhaust grille by ID [bulc-mcp rules] HVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExhaust grille ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is covered. The description adds no behavioral context beyond the verb — nothing about what removal cascades to (e.g. connected duct runs in the HVAC network), whether it is reversible, or how failures on an unknown ID are handled.

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?

The core sentence is tight and front-loaded, but the trailing rule/reference string adds unresolved noise without conveying actionable meaning, weakening an otherwise two-line definition.

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?

For a single-parameter removal tool with annotations covering safety and no output schema, the definition is minimally complete. It is missing the one piece an agent would want — whether the grille is detached from any connected HVAC ducting and what the failure mode is for a stale ID.

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 100% and the single 'id' parameter is fully documented in the schema as 'Exhaust grille ID to remove'. The description's 'by ID' restates the schema rather than adding format or lookup semantics, so the baseline of 3 applies.

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 verb+resource ('Remove an exhaust grille by ID') that is distinct from the add/update siblings and from hvac_remove_supply_diffuser, hvac_remove_duct and hvac_remove_node. It is unambiguous on its own, though it does not explicitly contrast itself with any sibling.

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 when-to-use guidance, no prerequisites, and no routing to alternatives such as hvac_update_exhaust_grille. The appended '[bulc-mcp rules] HVAC-001 — bulc_knowledge_search "<id>"' fragment is unexplained and reads as extraneous injected text rather than usable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_remove_nodeHvac remove nodeB
Destructive

Remove an HVAC node (also removes connected ducts and equipment) [bulc-mcp rules] EVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNode ID to remove

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and non-idempotent behavior, so the bar is lowered, but the description earns credit by disclosing the cascade scope — deleting connected ducts and equipment — which annotations do not convey. It does not state what happens if the node ID is invalid, but the key destructive side effect is surfaced.

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?

The core sentence is front-loaded and efficient — verb, resource, and cascade all in one line. The appended rules-pointer line is noise that muddies an otherwise clean, appropriately sized description.

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?

For a single-parameter destructive removal with no output schema, the cascade disclosure covers the most decision-relevant behavior. It is silent on failure modes (unknown ID), whether dependent equipment references are cleaned up, and the confusing EVAC-001 rule line leaves a gap in self-containedness.

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 100%; the single id parameter is documented as "Node ID to remove" in the schema itself. The description adds no format, prefix, or lookup guidance beyond that, so baseline 3 applies.

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 ("Remove an HVAC node") and adds scope detail that distinguishes it from siblings like hvac_remove_duct or hvac_remove_supply_diffuser: it cascades to connected ducts and equipment. Clear and specific, though it never names an alternative tool directly.

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?

No indication of when to use this versus editing/updating a node, or any prerequisite or warning about the cascade. The trailing "[bulc-mcp rules] EVAC-001 — bulc_knowledge_search" line is an unexplained, mis-namespaced pointer that provides no usable invocation guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_remove_supply_diffuserHvac remove supply diffuserB
Destructive

Remove a supply diffuser by ID [bulc-mcp rules] HVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSupply diffuser ID to remove

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is fully covered by structured data. The description adds only the cryptic HVAC-001 rule reference pointing to bulc_knowledge_search; it does not disclose side effects such as whether removal cascades to connected ducts or whether the action is reversible.

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 core sentence is short, front-loaded, and waste-free. The appended bracketed rule line is somewhat cryptic in phrasing but is brief and does not bloat the definition.

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?

For a single-parameter destructive tool with annotations covering the safety profile and no output schema, the description is minimally adequate. It omits any note on network/duct dependencies or post-removal state, which would matter for an HVAC component, leaving it adequate but with visible gaps.

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 coverage is 100% and the single 'id' parameter carries its own description. The description's 'by ID' phrase merely restates the schema, adding no format, source, or lookup guidance beyond what is already present, so the baseline of 3 applies.

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 (Remove) plus resource (supply diffuser) and identifier (by ID), which cleanly separates it from siblings like hvac_add_supply_diffuser and hvac_update_supply_diffuser. It does not explicitly name or differentiate against near-neighbors such as hvac_remove_duct or hvac_remove_node, so it stops short of 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 when-to-use, when-not-to-use, or alternative-routing guidance. The bracketed '[bulc-mcp rules] HVAC-001 — bulc_knowledge_search' line hints at a compliance check but does not explain the condition under which this tool should be invoked or avoided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_run_calcHvac run calcA

Run HVAC airflow calculation on the current duct network [bulc-mcp rules] HVAC-001, HVAC-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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=false, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds only the scoping fact that the calculation targets the current duct network; it does not say whether results are persisted, where they can be retrieved, or whether the network is mutated, which matters given readOnlyHint=false.

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 operative sentence is short, front-loaded, and free of padding. The appended bulk rule-reference block is a bit noisy and interrupts an otherwise clean definition, costing it a point.

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?

There is no output schema, and the description does not explain what the calculation returns or that results are fetched via the sibling hvac_get_results. For a zero-parameter execution tool whose annotations are thin on outcome, this leaves a real gap.

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 there is nothing for the description to disambiguate; the baseline for a parameterless tool applies. No parameter meaning is added because none exists.

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 verb and resource: 'Run HVAC airflow calculation on the current duct network'. This clearly separates it from siblings like hvac_get_results or hvac_list_summary. It stops short of naming an alternative sibling, so 4 rather than 5.

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: the 'current duct network' phrasing signals that an existing duct network is a prerequisite, and the trailing '[bulc-mcp rules] HVAC-001, HVAC-003 — bulc_knowledge_search' line hints at a mandated rule lookup, but no when-to-use condition or exclusion against spr_run_calc/hvac_get_results is stated explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_set_defaultsHvac set defaultsB
Idempotent

Set default duct shape, diameter, and material for new ducts [bulc-mcp rules] HVAC-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoDefault width (mm, for rectangular)
heightNoDefault height (mm, for rectangular)
diameterNoDefault diameter (mm)
materialNoDefault material
ductShapeNoDefault shape: circular | rectangular
airflowCFMNoDefault airflow (CFM)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write, idempotent, non-destructive profile, so the bar is lower. The description does add one genuinely useful behavioral fact — the values are defaults applied to *new* ducts, not retroactive edits to existing ones — but it omits persistence scope (project/session/level) and the trailing '[bulc-mcp rules] HVAC-001' fragment adds confusion rather than clarity.

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?

The first sentence is tight and front-loaded. The second fragment referencing bulc-mcp rules and a bulc_knowledge_search id placeholder is unexplained noise that does not earn its place in a tool description.

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?

For an idempotent six-parameter setter with full schema documentation and no output schema, the description covers the core action adequately. It nevertheless omits where the defaults take effect and how they interact with ducts already created, which an agent would need to avoid misusing it.

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 100%, with all six parameters (width, height, diameter, material, ductShape, airflowCFM) individually documented in the schema, so the baseline is 3. The description restates only three of them (shape, diameter, material) and adds no syntax, units, or interaction details beyond the schema.

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: 'Set default duct shape, diameter, and material for new ducts'. The 'for new ducts' qualifier scopes the operation, distinguishing it from duct-editing siblings like hvac_update_duct or hvac_add_duct. It stops short of naming a sibling or clarifying project-level vs. level-level scope, so it's clear but not fully differentiated.

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: the phrase 'for new ducts' tells the agent this configures defaults that apply going forward rather than altering existing ducts. There is no explicit when-to-use, no prerequisites, and no mention of nearby alternatives such as hvac_update_duct or spr_set_defaults.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_update_air_handlerHvac update air handlerC
Idempotent

Update properties of an existing air handler unit

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAir handler ID
fanTypeNoNew type: supply | exhaust | return
maxAirflowCFMNoNew max airflow (CFM)
staticPressurePaNoNew static pressure (Pa)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds only 'existing', and omits partial-update semantics (whether unspecified properties are left unchanged) and behavior when the ID is invalid or absent.

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 with the verb and resource front-loaded and no filler. It is efficient, though its brevity reflects under-specification rather than a considered minimum.

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?

With annotations covering safety and a fully documented schema, the core is adequate for a simple partial-update tool with no output schema. It still leaves gaps around partial-update semantics and error behavior for missing units.

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 100%, so the schema fully documents id, fanType, maxAirflowCFM, and staticPressurePa including the enum-like fan type values. The description adds no parameter meaning beyond that, so the baseline of 3 applies.

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 ('Update') and resource ('properties of an existing air handler unit'), which is clearly distinguishable from hvac_add_air_handler and hvac_remove_air_handler by operation. However, it does not name or reference the related sibling tools (hvac_update_duct, hvac_update_node) to reinforce the boundary.

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 guidance on when to use this versus alternatives or prerequisites. The word 'existing' hints the unit must already exist, but there is no explicit when-to-use or when-not-to-use statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_update_ductHvac update ductB
Idempotent

Update properties of an existing duct

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDuct ID
widthNoWidth (mm)
heightNoHeight (mm)
diameterNoDiameter (mm)
materialNoMaterial
ductShapeNoShape: circular | rectangular

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety and repeatability profile is covered. The description adds only the word 'existing', which usefully signals that the id must reference a pre-existing duct, but it says nothing about partial-update semantics or what happens to unspecified fields.

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 waste. It is efficient, though arguably under-specified rather than optimally concise given the tool's complexity.

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?

For a six-parameter mutation tool with no output schema, the description omits important context: whether updates are partial or replace the whole object, and how ductShape (circular | rectangular) governs whether diameter or width/height is meaningful. The annotations cover safety, but the domain logic an agent needs to call this correctly is missing.

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 100%, so all six parameters (id, width, height, diameter, material, ductShape) are already documented in the schema. The description adds no extra meaning about optionality or which parameters apply to which duct shape, so the baseline 3 applies.

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?

Clear verb+resource ('Update properties of an existing duct') that identifies the operation precisely and implies the sibling hvac_add_duct is for creation. It does not explicitly name or distinguish itself from the other hvac_update_* siblings (node, supply diffuser, exhaust grille, air handler), so the differentiation is inferential rather than stated.

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?

No guidance on when to use this versus hvac_add_duct, hvac_update_node, or hvac_remove_duct, and no prerequisites beyond the implicit 'existing'. The agent must infer the calling context entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_update_exhaust_grilleHvac update exhaust grilleA
Idempotent

Update properties of an existing exhaust grille [bulc-mcp rules] HVAC-001, HVAC-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExhaust grille ID
airflowCFMNoNew airflow (CFM)
grilleTypeNoNew type: louvered | perforated | egg_crate | bar

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds only "existing," implying a failure mode for unknown IDs; it says nothing about partial-update semantics (are unspecified properties retained?) or validation 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 short sentence front-loaded with the operation and resource, followed by a compact rule reference. The bracketed rule fragment is cryptically phrased but occupies minimal space and is not padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering the mutation/idempotency profile, 100% schema coverage, and no output schema to explain, the description supplies everything needed to place a correct call. Remaining details (validation errors, partial update behavior) are secondary for this low-complexity 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 100% and grilleType even enumerates its allowed values, so the schema carries the parameter burden. The description adds no format, unit, or range guidance beyond it, which lands at the baseline for fully documented schemas.

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 ("Update properties of an existing exhaust grille"), which cleanly separates it from hvac_add_exhaust_grille, hvac_remove_exhaust_grille, and hvac_update_supply_diffuser. No differentiation is given beyond the noun, but the noun 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit statement of when to choose this over siblings like hvac_update_duct or hvac_set_defaults. The embedded rule tag (HVAC-001, HVAC-003 pointing at bulc_knowledge_search) implies a compliance prerequisite, but it does not tell the agent which condition selects this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_update_nodeHvac update nodeB
Idempotent

Update properties of an existing HVAC node [bulc-mcp rules] EVAC-001, GEN-021, HVAC-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNew X position (m)
yNoNew Y position (m)
zNoNew Z position (m)
idYesNode ID
typeNoNew type: junction | supply_diffuser | exhaust_grille | fan
labelNoNew label

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, idempotent, non-destructive, closed-world mutation, so the safety profile is covered. The description adds only a cryptic rule-citation string and says nothing about which fields are optional at runtime, whether unspecified properties are preserved, or what validation/authorization is required before mutating a node.

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?

The core sentence is short and front-loaded, which is good, but the trailing '[bulc-mcp rules] EVAC-001, GEN-021, HVAC-002 — bulc_knowledge_search "<id>"' fragment is noisy, unexplained boilerplate that consumes attention without conveying clear instructions.

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?

For a six-parameter mutation with full schema documentation, annotations covering safety/idempotency, and no output schema, the description is minimally sufficient. It still omits update semantics (partial vs full replacement) and any explanation of the rule-lookup requirement it references.

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 100% (id as 'Node ID', x/y/z positions, type with enumerated values, label), so the schema carries all parameter meaning. The description adds no per-parameter semantics, which is the expected baseline when the schema is fully documented.

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 ('Update properties of an existing HVAC node'), so the operation itself is unambiguous. However, it does nothing to distinguish this from close siblings like hvac_update_duct, hvac_update_supply_diffuser, or hvac_update_air_handler, all of which share the same verb pattern.

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?

The appended '[bulc-mcp rules] ... bulc_knowledge_search "<id>"' block implies the agent should look up compliance rules before performing the update, which is a weak precondition hint. It never states when to prefer this tool over hvac_add_node or hvac_remove_node, nor any exclusion or prerequisite conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hvac_update_supply_diffuserHvac update supply diffuserB
Idempotent

Update properties of an existing supply diffuser [bulc-mcp rules] HVAC-001, HVAC-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSupply diffuser ID
airflowCFMNoNew airflow (CFM)
supplyTempCNoNew supply temperature (°C)
diffuserTypeNoNew type: square | round | linear | slot

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=false, so the agent knows this is a safe, repeatable mutation. The description adds only the word 'existing', implying the diffuser must already exist, but says nothing about partial-update semantics (whether omitted fields are preserved), required permissions, or side effects on connected ducts/nodes.

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 does the work with no padding. The trailing bracketed rule tag is tersely formatted and slightly cryptic, but it is short and arguably useful for compliance lookup.

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?

For a four-parameter, non-destructive update with annotations covering the safety profile and full schema coverage, this is minimally adequate. It still omits partial-update behavior, error/not-found handling, and any mention of the diffuser's linkage to the duct network, which matter for a network-update tool with no output schema.

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 100% with all four parameters (id, airflowCFM, supplyTempC, diffuserType) documented, including units and the diffuserType value set, so the baseline is 3. The description adds no meaning beyond the schema — in particular it never states that unspecified properties are left unchanged, which is the one semantic detail the schema cannot convey.

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 verb and resource ('Update properties of an existing supply diffuser'), which is unambiguous and clearly distinct from sibling resources like hvac_update_duct, hvac_update_node, or hvac_update_exhaust_grille. It stops short of explaining how it relates to the add/remove variants or what 'properties' concretely means, so it is clear but not fully differentiated.

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 hvac_add_supply_diffuser, hvac_update_duct, or the generic update tools. The bracketed rule citation (HVAC-001, HVAC-003 pointing at bulc_knowledge_search) is a compliance reference, not usage guidance, and is too cryptic to route an agent reliably.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bndfList bndfB
Read-onlyIdempotent

List the animated boundary (BNDF) quantities written for solid surfaces.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered without the description. The description adds useful scoping context by clarifying that these are animated boundary quantities tied to solid surfaces, which is more than the annotations provide but still thin on what the listing contains.

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?

A single front-loaded sentence that expands the acronym and states the resource with zero filler. Every word 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?

For a no-parameter list tool with no output schema, the description should ideally hint at what the returned listing looks like. It conveys the subject ('quantities written for solid surfaces') but not the response shape or whether entries are empty by default, leaving a modest gap.

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 schema-based baseline is 4. There is nothing parameter-wise for the description to compensate for or clarify.

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 ('List') and resource ('animated boundary (BNDF) quantities'), and expands the BNDF acronym while scoping it to 'solid surfaces'. It implicitly separates itself from the add_bndf/remove_bndf siblings by the read-only 'List' verb, but never names or contrasts them 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 when-to-use guidance, no mention of prerequisites, and no named alternative such as list_surfaces or the add_bndf/remove_bndf pair. The agent must infer that this is for inspecting which BNDF outputs exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_devicesList devicesA
Read-onlyIdempotent

List all measurement devices with their ID, quantity, and position — both &DEVC devices and detector objects (heat/smoke detectors, thermocouples, sprinkler and nozzle objects), which are written to the deck as DEVC+PROP. [bulc-mcp rules] DEVC-001, DEVC-003, DEVC-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower, and the description still adds real behavior: that detector objects are emitted to the FDS deck as DEVC+PROP lines. It does not mention ordering, pagination, or whether the list reflects the deck or only in-memory state, which would have pushed this higher.

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 purpose and return fields, with the parenthetical enumeration of detector types doing necessary disambiguation work. The bracket-tagged rules line is compact but cryptically formatted — it reads as an internal cross-reference rather than agent-facing prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by naming the returned fields (ID, quantity, position) and the two device families covered. Combined with annotations that fully characterize the read-only, idempotent behavior, an agent has everything needed to call it correctly.

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 there is nothing for the description to disambiguate and the baseline of 4 applies. The description instead spends its words on what the no-argument call returns, which is the more useful information here.

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?

Names a specific verb (List) and resource (measurement devices), then scopes it precisely: both &DEVC devices and detector objects, with the ID/quantity/position fields called out. The resource is unique enough among the list_* siblings (list_surfaces, list_obstacles, list_vents, list_geoms) that an agent can tell it apart without opening any schema.

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 — an agent can infer this is the read-side companion to add_device/update_device/remove_device, but the description never says when to call it versus, say, get_object_properties or a knowledge lookup. The trailing rules pointer (DEVC-001, DEVC-003, DEVC-004 → bulc_knowledge_search) hints at a validation workflow without stating the condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_furniture_catalogList furniture catalogB
Read-onlyIdempotent

List available furniture items. Filter by category or keyword search.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordNoSearch keyword (name or ID)
categoryNoCategory filter: living_room, bedroom, kitchen, office, bathroom, fire_safety, hvac, doors_windows, lights, misc

TDQS

B3.3/5.0
Behavior2/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. The description adds nothing beyond that — no note on whether results are paginated, capped, or what 'available' excludes, so it contributes no behavioral context beyond the structured fields.

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?

Two short sentences, purpose front-loaded before the filtering detail, with no filler. It is slightly generic but wastes no space.

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?

For a read-only, zero-required-parameter catalog listing with full schema coverage and complete safety annotations, the description covers enough to invoke it correctly. The only unaddressed point is default behavior with no filter applied, which is minor given there is no output schema to explain.

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 100% and both optional parameters are documented in the schema, including the full category enumeration. The description merely restates 'category' and 'keyword' without adding format, matching, or precedence rules, so baseline 3 applies.

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 ('List available furniture items'), so the agent knows exactly what it retrieves. It does not differentiate itself from the nearby sibling get_furniture_info or place_furniture, leaving the choice between 'list' and 'get info' to inference.

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?

'Filter by category or keyword search' implies a browsing use case, but there is no explicit statement of when to use this versus get_furniture_info (details for one item) or place_furniture (insertion). Usage is implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_geomsList geomsA
Read-onlyIdempotent

List the &GEOM (triangulated cut-cell geometry) entries in the deck with triangle count, SURF_ID and bounding box.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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 and destructiveHint=false, so the safe-read profile is fully covered. The description adds the per-entry contents (triangle count, SURF_ID, bounding box), which is useful, but says nothing about ordering, pagination, or how an empty deck behaves. With annotations carrying the safety burden, this 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?

A single tight sentence with the resource front-loaded and the returned fields trailing. No wasted words, no redundancy with the title.

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 output schema, the description must hint at the return shape and it does so concretely (triangle count, SURF_ID, bounding box). For a read-only, parameterless list tool this is nearly complete; only ordering and empty-result behavior are unstated.

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 there is nothing for the description to disambiguate and the baseline for a no-parameter tool applies. The description correctly adds no parameter noise.

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 ("List") and resource (&GEOM entries in the deck), and even defines the acronym as triangulated cut-cell geometry, which effectively separates it from list_surfaces, list_obstacles or list_meshes. It stops short of explicitly distinguishing itself from any sibling by name, so it lands just below the top tier.

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 rather than get_object_properties or the other list_* tools, and no prerequisites or exclusions. Usage is only implied by the verb "List".

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_material_libraryList material libraryB
Read-onlyIdempotent

List built-in material presets (density/conductivity/specific heat/pyrolysis) available to add to the model, optionally filtered by category or search text. [bulc-mcp rules] SURF-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoSubstring match on id / Korean / English name
categoryNoFilter: structure, wood, insulation, plastic, textile, cable, liquid_fuel, metal, other

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true, idempotent=true, destructive=false and closed-world, so the safety profile is fully covered elsewhere. The description usefully discloses that these are built-in read-only presets with fixed property fields, but adds nothing about result ordering or whether a model/project must be open. The trailing '[bulc-mcp rules] SURF-001 — bulc_knowledge_search "<id>"' fragment is unexplained noise.

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?

The first sentence is well-formed, front-loaded and appropriate in length. The appended bracketed rule reference is unexplained, ungrammatical in context, and actively hurts readability without adding actionable guidance for this tool.

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?

For a simple two-optional-param read-only lister with no output schema, the description is nearly sufficient: it names the resource, the filter dimensions, and the property fields each preset carries. Only the missing relationship to the add_*_from_library consumers and the confusing rule tag keep it from being fully complete.

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 100% and both params are documented there in richer detail (substring match on id/Korean/English name; full category enumeration). The description only parrots 'filtered by category or search text', adding no syntax or matching nuance beyond the schema, so the baseline 3 applies.

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?

Clear verb+resource: 'List built-in material presets' with the preset payload enumerated (density/conductivity/specific heat/pyrolysis), so an agent knows exactly what comes back. It implicitly differentiates from add_material_from_library by saying the presets are 'available to add to the model', but never names that sibling 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?

The only qualifier is 'optionally filtered by category or search text', which restates the parameters rather than telling the agent when to reach for this tool. There is no mention of the natural alternative (add_material_from_library / add_surface_from_library) or when not to browse, so usage is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_meshesList meshesA
Read-onlyIdempotent

List the current &MESH deck (multi-mesh or the single mesh) with per-mesh XB, IJK, cell size, cell count and coarse/fine ratio, plus totals and a self-check for overlap / gaps / non-cubic cells. Read this before set_meshes, slice_mesh or merge_meshes so index numbers refer to the right mesh. [bulc-mcp rules] MESH-001, MESH-005, GEO-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuine value beyond that: it discloses the diagnostic self-check for overlap/gaps/non-cubic cells and the coarse/fine ratio, which tells the agent this is a validation-oriented read, not just a dump.

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?

Two substantive sentences, front-loaded with what is listed and followed by the ordering rule; no filler. The bracketed rule-id footer is terse and slightly cryptic, but it functions as a cross-reference to bulc_knowledge_search rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the burden of describing return content — and it does so item by item, including the derived diagnostics. Combined with the ordering guidance and annotation-covered safety profile, there is nothing an agent needs to call this correctly that is missing.

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 there is nothing to document and the baseline is 4. Schema coverage is 100% and the empty object schema matches the parameterless description.

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 (list) and resource (&MESH deck) and enumerates exactly what is returned (XB, IJK, cell size, cell count, coarse/fine ratio, totals, self-check). It also names the sibling tools it precedes (set_meshes, slice_mesh, merge_meshes), so an agent can distinguish it from them without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to read this before set_meshes, slice_mesh or merge_meshes, and gives the reason (so index numbers refer to the right mesh). This is a concrete when-to-use rule tied to specific alternatives, not implied guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_obstaclesList obstaclesB
Read-onlyIdempotent

List all obstacles with their ID, position, and properties. [bulc-mcp rules] GEN-002, GEN-003, GEN-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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 and repeatability profile is covered structurally. The description usefully adds what a listed obstacle contains (ID, position, properties), but says nothing about ordering, scale, or pagination for what could be a large list.

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?

The first sentence is tight, front-loaded, and earns its place. The second line is unexplained metadata bolted onto a tool description rather than a doc reference, reading as noise and raising more questions (what are GEN-002/003/004, and why fetch a knowledge article by '<id>'?) than it answers.

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?

For a zero-parameter, read-only enumeration tool with no output schema, the description does cover the essential return shape, and annotations cover the safety profile. It stops short of what an agent would want before calling it on a real project: nothing about list size, ordering, or how to obtain a single obstacle's full detail.

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 there is no parameter semantics burden; the baseline for a no-parameter tool applies. The description correctly spends no space on nonexistent inputs.

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 ('List all obstacles') and enumerates the returned fields (ID, position, properties), which is more than the sibling list tools typically give. It does not, however, distinguish itself from adjacent list tools such as list_geoms, list_surfaces, or get_object_properties, leaving the agent to infer the difference.

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 versus close relatives like get_object_properties, list_geoms, or the add/update/remove_obstacle family. The only appended text is a cryptic rule reference ('GEN-002, GEN-003, GEN-004 — bulc_knowledge_search "<id>"') that implies some workflow step but does not tell the agent which condition selects this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_raw_namelistsList raw namelistsB
Read-onlyIdempotent

List the raw namelist lines carried through unchanged (&RADI, &PRES, &COMB, &ZONE, &MULT, …) — settings the GUI has no dialog for but the deck and the engine keep. [bulc-mcp rules] GEN-016, SIM-002, SIM-006 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), so the description's main job is adding context. It does disclose that these lines are carried through unchanged and exist because the GUI lacks dialogs, which is useful behavioral framing, but it doesn't say who added them or how to interpret the order/contents of returned lines. The unexplained GEN-016/SIM-002/SIM-006 reference adds noise rather than transparency.

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?

The core sentence is reasonably tight and front-loaded, but the appended '[bulc-mcp rules] GEN-016, SIM-002, SIM-006 — bulc_knowledge_search "<id>"' is an unexplained instruction that would confuse an agent reading the description cold. It occupies roughly half the text without clarifying the tool's use.

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?

With no parameters, no output schema, and annotations covering safety, the description only needs to explain what raw namelists are and when they appear. It does say they are GUI-less pass-through settings, which is helpful, but omits how to add/remove them (add_raw_namelist/remove_raw_namelist) and what the returned lines look like. Adequate but leaves clear gaps for a tool whose whole value is interpreting opaque output.

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 per the rubric the baseline is 4. The description does not need to describe arguments and does not attempt to, which is appropriate.

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 (List) and resource (raw namelists), and the parenthetical names the actual namelist groups (&RADI, &PRES, &COMB, &ZONE, &MULT) plus the qualifier 'carried through unchanged', which distinguishes it from related tools like list_meshes or list_surfaces. It does not explicitly reference its closest siblings add_raw_namelist/remove_raw_namelist, keeping it below 5.

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?

The phrase 'settings the GUI has no dialog for but the deck and the engine keep' implies these are untouched pass-through settings, which hints at when to look here, but no explicit when-to-use or when-to-choose-this-over-get_simulation_settings/list_meshes guidance is given. The trailing bulc-mcp rule reference (GEN-016, SIM-002, SIM-006) is not explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_slcfList slcfA
Read-onlyIdempotent

List all slice (SLCF) outputs with id, quantity, plane, and flags.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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 by structured data. The description adds the returned field set (id, quantity, plane, flags), which is useful context but not deep behavioral disclosure.

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?

A single tightly written sentence that front-loads the verb and resource with zero filler. Nothing is redundant or wasted.

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 output schema, the description usefully lists the fields an agent will receive (id, quantity, plane, flags), which compensates for the absent return schema. A zero-parameter, read-only listing tool is adequately covered by this one sentence.

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. Nothing in the description needs to document inputs, and it does not introduce misleading parameter chatter.

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 (List) and resource (slice/SLCF outputs) and enumerates the fields returned. It is clearly distinguishable from the sibling add_slcf/remove_slcf/update_slcf by the read verb, though it never names those siblings 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 'List all' phrasing and the read-only nature of the tool, but there is no explicit statement of when to reach for this versus the related add/update/remove_slcf tools or other listing tools such as list_meshes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_surfacesList surfacesB
Read-onlyIdempotent

List all user-defined general surfaces (&SURF) with their layers and burning behaviour. [bulc-mcp rules] SURF-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds useful return-content detail (layers and burning behaviour), but says nothing about ordering, volume, or output format, so it is only a modest addition.

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?

The first sentence is tight and front-loaded. The appended '[bulc-mcp rules] SURF-001 — bulc_knowledge_search "<id>"' fragment is syntactically broken and motile, undermining the otherwise clean structure.

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?

For a zero-parameter, read-only list tool with no output schema, the description gives a reasonable sense of what is returned (surfaces with layers and burning behaviour). However, it omits any notion of result size/format and the stray rules line adds noise rather than completeness.

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 per the rubric the baseline is 4. There is nothing for the description to clarify here, and the empty schema is consistent.

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 (List) and resource (user-defined general surfaces, &SURF), and names the returned sub-content (layers, burning behaviour). It is distinguishable from sibling list tools such as list_material_library and list_slcf, though the differentiator is mostly the '&SURF' tag rather than an explicit contrast.

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 over alternatives (e.g., list_slcf, list_geoms, list_material_library). The trailing '[bulc-mcp rules] SURF-001 — bulc_knowledge_search' line is a cryptic rule pointer, not actionable usage guidance, and leaves the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ventsList ventsB
Read-onlyIdempotent

List all vents with their ID, surface type, and position. [bulc-mcp rules] GEN-004, TRB-002, VENT-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint, idempotentHint and destructiveHint=false annotations already establish the safe-read profile, so the description's remaining burden is low. It helpfully discloses the returned fields, which no schema provides since there is no output schema, but says nothing about ordering, pagination, or behavior when no vents exist.

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 action and return fields in a single tight sentence. The trailing rule-ID tag is somewhat cryptic to an agent that has not read GEN-004/TRB-002/VENT-002, but it is short and does not bury the main statement.

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 output schema, the description correctly compensates by naming the three returned fields, and annotations cover the safety profile. Missing only peripheral context such as whether an open project is required or the result ordering.

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 there is no parameter semantics to explain and the baseline of 4 applies. The description's field list describes output rather than inputs, which is harmless here.

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?

Clear verb+resource with enumerated return fields (ID, surface type, position), so an agent knows exactly what is produced. It is distinguishable from list_surfaces, list_devices and list_obstacles by resource name, but the description does not explicitly state that distinction.

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?

No when-to-use or when-not-to-use guidance, and no mention of the natural alternatives in the sibling set (add_vent, update_vent, remove_vent, get_object_properties). The only pointer is a terse rules tag directing to bulc_knowledge_search, which is about compliance rules rather than tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

merge_meshesMerge meshesA
Destructive

Merge several meshes back into one (inverse of slice_mesh). Succeeds only when the selected meshes do not overlap and their union is exactly a box. When their cell sizes differ, choice picks which size the result uses; the union must divide into a whole number of those cells. Use list_meshes for index numbers. [bulc-mcp rules] MESH-001, MESH-005 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
choiceNoCell size to keep when the meshes differ: 'coarse' (larger cells, fewer) or 'fine'.
indicesYesMesh indices to merge (2 or more)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the description only needs to add context — and it does: it discloses the geometric success conditions and the cell-size rule that governs the result. It stops short of saying what happens to the source meshes on success or how failure is reported.

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 action, then constraints, then the helper tool reference — four tight sentences with no filler. The appended bulc-mcp rules tag adds housekeeping noise but is a convention, not prose bloat.

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?

For a destructive, non-idempotent, two-parameter operation with no output schema, the description supplies the geometry preconditions and the choice semantics that determine success. The remaining gap — whether the source meshes are consumed and what a failure returns — is minor but noticeable for a destructive tool.

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 coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the enum text: 'choice' only matters when cell sizes differ, and the union must divide into a whole number of the chosen cells. It also ties 'indices' to list_meshes for obtaining valid values.

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 and resource ('merge several meshes back into one') and explicitly anchors it as the inverse of slice_mesh, which no sibling name conveys on its own. An agent can distinguish this from slice_mesh, set_meshes, and auto_multimesh immediately.

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?

Gives concrete preconditions ('only when the selected meshes do not overlap and their union is exactly a box') and routes the agent to list_meshes for index numbers. It does not spell out when to prefer an alternative such as slice_mesh or auto_multimesh, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

output_add_tenability_slicesOutput add tenability slicesA
Idempotent

Add the horizontal slices the ASET check needs at floor + height (default 1.8 m) on every story (or the given story ids / absolute z): TEMPERATURE, VISIBILITY and VOLUME FRACTION of OXYGEN, CARBON DIOXIDE, CARBON MONOXIDE (quantities can be limited). Existing identical slices are skipped. Run before sim_start (OUT-006, ASET-004). [bulc-mcp rules] ASET-001, ASET-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
zNoAbsolute plane heights instead of stories
heightNoHeight above each story floor (default 1.8 m)
storiesNoStory ids (default all stories)
quantitiesNoDefault all five

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, idempotent, non-destructive, but the description adds real behavioral context: identical slices are skipped (concretizing idempotency), the default height is 1.8 m, all five quantities are added unless limited, and it must run before the simulation starts.

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 action and scope in a single dense sentence, then appends ordering and rule references. Efficient, though the bracketed rule ids and knowledge-search pointer add some scannable overhead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and full annotation coverage, the description supplies everything an agent needs to call it correctly: what is created, defaults, deduplication behavior, and the required sequencing relative to sim_start. Nothing material is missing.

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 coverage is 100%, so the baseline is 3, but the description adds meaning beyond the bare enum values by spelling out that the quantities are VOLUME FRACTION of OXYGEN, CARBON DIOXIDE and CARBON MONOXIDE, and clarifies the story-ids vs absolute-z choice. The 1.8 m default and 'all five' default largely restate the schema.

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 (add) plus a precise resource (horizontal tenability slices at floor + height per story) and enumerates the quantities involved (TEMPERATURE, VISIBILITY, O2, CO2, CO). An agent can distinguish this from sibling slice tools without opening the schema.

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?

Explicitly states the timing constraint 'Run before sim_start (OUT-006, ASET-004)' and routes to bulc_knowledge_search for rule detail, giving clear context for when to invoke it. It does not name an alternative tool or a when-not condition, but no obvious sibling competes for this action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

place_furniturePlace furnitureA

Place a furniture/item at a position. Doors and windows (doors_windows category) auto-snap to the nearest wall and create a wall opening (hole), exactly like the GUI. Items with fire data are placed as fire sources automatically. Changes reflect to the 2D/3D view immediately. [bulc-mcp rules] EVAC-002, FIRE-001, FIRE-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position (m)
yYesY position (m)
zNoZ position (m, default 0)
furniture_idYesFurniture ID from catalog
as_fire_sourceNoPlace as fire source (uses furniture fire data)

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly=false, idempotent=false, destructive=false), the description discloses real behavior: doors/windows auto-snap to the nearest wall and create a wall opening, fire-data items become fire sources automatically, and changes reflect to the 2D/3D view immediately. It also ties in bulc rule IDs (EVAC-002, FIRE-001, FIRE-002) that can be looked up. It stops short of stating side effects on existing geometry or permissions.

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 action, then behavioral details in descending importance. The trailing '[bulc-mcp rules] ... bulc_knowledge_search' line is dense but compact and actionable. No wasted prose, though the rules line is terse enough to be ambiguous.

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?

For a 5-parameter mutation with no output schema, the description covers the notable behavioral cases (snapping, fire-source promotion, live view updates) that an agent needs. It would be stronger if it pointed to list_furniture_catalog for obtaining furniture_id and clarified overlap with add_door/add_window, but it is largely complete.

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 100%, so the schema already documents x/y/z, furniture_id, and as_fire_source, making 3 the baseline. The description adds only marginal meaning by noting that fire-data items are placed as fire sources automatically, which loosely relates to as_fire_source, but it adds no format or unit detail beyond the schema.

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?

Starts with a specific verb+resource: 'Place a furniture/item at a position.' An agent can immediately tell this places catalog items. It does not, however, name or contrast itself with the many placement siblings (add_door, add_window, add_obstacle), so it is clear but not sibling-differentiating.

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?

The description implies usage via the special cases it describes (doors/windows category auto-snap, fire items become fire sources), which tells an agent this tool is the entry point for catalog furniture. But it gives no explicit when-to-use/when-not guidance or routing against siblings like add_door/add_window, which overlap with the doors_windows behavior described here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_fdsPreview fdsA
Read-onlyIdempotent

Render the current project as FDS deck text and return it WITHOUT writing a file (the GUI FDS Preview dialog). Use namelist to show only one group (e.g. "MESH", "SLCF", "OBST", "DUMP") and max_lines to cap the output. This is the fastest way to check that a mesh / output / geometry change lands in the deck the way you expect. [bulc-mcp rules] DEVC-005, DEVC-009, FIRE-013 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
namelistNoShow only this namelist group, without '&' (e.g. MESH, DUMP, SLCF, OBST, VENT, SURF, CTRL)
max_linesNoMaximum lines to return (default 200; the reply says how many were cut)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: no file is written, the output is deck text mirroring the GUI FDS Preview dialog, and truncation behavior is surfaced via max_lines. It stops short of describing the exact return shape.

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?

Three tight, front-loaded sentences: what it does, how to filter, why it matters. The trailing bulc-mcp rules tag is terse and slightly cryptic but is a deliberate cross-reference rather than padding.

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 output schema and only two optional parameters, the description supplies what an agent needs: output is deck text, nothing is persisted, and output size can be capped. It could have stated whether the full deck or just a slice is returned by default, but the gaps are small.

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 coverage is 100%, so both parameters (including the default of 200 lines and the 'reply says how many were cut' behavior) are already documented in the schema. The description's examples of namelist groups duplicate rather than extend that, so the baseline 3 applies.

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 (render) and resource (current project as FDS deck text) with the critical qualifier that nothing is written to disk. That qualifier alone distinguishes it from project_export_fds and fds_apply_text without opening either schema.

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?

Gives concrete when-to-use guidance ('fastest way to check that a mesh / output / geometry change lands in the deck the way you expect') and explains how the two params narrow the view. It implies the contrast with file-writing export tools but never names the alternative sibling explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_export_fdsProject export fdsA
Idempotent

Write the current model as an FDS 6.10.1 input deck (.fds) to path (absolute, must end with .fds). CHID becomes the file name. Refuses to replace an existing file unless overwrite=true. To only read the deck use preview_fds. Live app only. [bulc-mcp] Writes files on this PC; overwrite=true only after the user agreed (GEN-014). [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute .fds path
overwriteNoReplace an existing file (default false)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, destructive=false, idempotent=true, so the safety profile is partly covered. The description adds real behavior beyond that: it refuses to replace an existing file unless overwrite=true, the CHID-derived filename, and the 'live app only' runtime constraint. It does not describe error/return behavior, but for a file-write tool this is solid added context.

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 action and constraints, and every sentence carries information (path rules, naming, refusal, alternative, runtime scope). The rule-ID tag lines are terse and meta but relevant to this tool's governance; no filler prose.

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?

No output schema exists, and the description adequately covers what the call produces (a .fds file at the given path, named per CHID) plus its refusal condition and the read-only alternative. Minor gaps remain around failure modes and post-write state, but nothing essential to correct invocation is missing.

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 coverage is 100%, so the baseline is 3; the description still adds value by tying the file name to CHID and reinforcing the absolute-path/'.fds' extension constraint and the refusal semantics of overwrite. Slightly above the schema-only baseline.

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 and resource — 'Write the current model as an FDS 6.10.1 input deck (.fds)' — plus the destination. It also names the sibling it is not (preview_fds for read-only), so an agent can separate this from the read path without opening a schema.

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?

Gives a clear when-not alternative ('To only read the deck use preview_fds') and a prerequisite for the destructive variant (overwrite only after the user agreed). It does not route against the other export siblings (shape_export_geom/obst/stl), but the project-level vs shape-level distinction is reasonably implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_infoProject infoA
Read-onlyIdempotent

Read the open project: file path, unsaved changes, CHID, deck path used for runs, stories (id, name, zMin, height, EVAC floorIndex), domain and mesh cells, object counts per module. Call this first in a session and after project_open. Read-only. [bulc-mcp rules] EVAC-002, GEN-006, GEN-010 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so 'Read-only' is largely redundant. The description does add real behavioral value by enumerating exactly which project state gets surfaced (unsaved-changes flag, active CHID, the deck path actually used for runs), letting an agent know this reflects live document state rather than a cached summary.

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 read operation, then the return inventory, then the usage rule — each sentence carries information. The trailing '[bulc-mcp rules] EVAC-002, GEN-006, GEN-010 — bulc_knowledge_search "<id>"' line is terse and slightly cryptic but ties the tool to a concrete follow-up capability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the job of describing the return payload and does so field-by-field, which is the single most useful thing an agent could be told here. Combined with the usage trigger and the referenced knowledge-base rules, nothing material is missing for a zero-parameter read of current project state.

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 schema imposes no documentation burden and the baseline is 4. Nothing in the description mischaracterizes the calling convention.

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 ('Read the open project') and enumerates the payload precisely (file path, unsaved changes, CHID, deck path, stories with id/name/zMin/height/floorIndex, domain and mesh cells, per-module object counts). Very clear what it does. It does not differentiate itself from nearby siblings such as get_project_summary or get_config_summary, which a reader must disambiguate on their own.

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?

'Call this first in a session and after project_open' gives an explicit trigger condition and a concrete sequencing rule, which is exactly the kind of guidance a session-start tool needs. There is no stated when-not or exclusion (e.g., what to use instead mid-session), so it stops short of a full routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_newProject newA
Destructive

Start a new empty project in the running app (File > New): clears geometry, evacuation, sprinkler, HVAC and drawing state. Refuses when there are unsaved changes unless discard_unsaved=true. Live app only. [bulc-mcp] discard_unsaved=true throws away unsaved edits — ask the user first (GEN-014). [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
discard_unsavedNoDiscard unsaved changes (default false)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: it itemizes the state destroyed (geometry, evacuation, sprinkler, HVAC, drawing), documents the refusal guard, and warns that discard_unsaved discards edits and should be user-confirmed.

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 operative content is front-loaded in two compact sentences with no filler. The trailing rule-ID citations are slightly noisy but serve as pointers to referenced governance rules rather than wasted prose.

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?

For a one-parameter, no-output-schema mutation tool this covers purpose, side effects, guards, and safety. It stops short of describing the post-reset state or return value, a minor gap given the tool's simplicity.

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 coverage is already 100% (default false is documented in the schema), so the baseline is 3; the description adds real meaning by explaining the refusal semantics the flag overrides and the consent requirement for using it.

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 and resource ('Start a new empty project in the running app (File > New)') and enumerates exactly what state is cleared, which cleanly separates it from siblings like project_open, project_save, and shape_new_document.

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?

Gives a clear usage condition ('Live app only') and an explicit pre-condition with the remedy (refuses with unsaved changes unless discard_unsaved=true). It does not name an alternative tool for the non-live/headless case, so routing to a sibling is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_openProject openA
Destructive

Open a .bulc project or a .fds deck in the running BULC app (same as File > Open, including evacuation, drawing, sprinkler and HVAC side files). path must be absolute. Refuses when the open project has unsaved changes unless discard_unsaved=true (ask the user first). Live app only. [bulc-mcp] discard_unsaved=true throws away unsaved edits — ask the user first (GEN-014). [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path of a .bulc or .fds file
discard_unsavedNoDiscard unsaved changes of the current project (default false)

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true and non-idempotent, and the description goes well beyond them: it names exactly what is destroyed (unsaved edits), the guard condition that blocks the call, the requirement that the app be running, and that the path must be absolute. It also points to the governing rules via bulc_knowledge_search, which is unusually informative for a mutation tool.

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 action, then hardening constraints. Dense and mostly waste-free, though the bracketed rule-ID tail (GEN-006/010/016 plus the knowledge-search pointer) is boilerplate that slightly dilutes the prose.

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?

Preconditions, destructive side effects, environment constraints, and rule references are all present, which is ample for a 2-parameter tool with no output schema. It does not state what happens to the currently open project on success (replacement vs. new window), a minor residual gap.

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 100%, so both parameters are already documented (absolute path, default false for discard_unsaved). The description reinforces the destructive semantics of discard_unsaved but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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?

Specific verb+resource ('Open a .bulc project or a .fds deck in the running BULC app') with an explicit analogy to File > Open and enumeration of the side files included. This clearly separates it from project_new, project_save, and the many shape_* creation tools.

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?

States the operating context ('Live app only'), the precondition for refusal (unsaved changes), and the fallback flag (discard_unsaved=true with a user-confirmation instruction). It does not, however, name sibling alternatives such as project_new for creating a document or project_save for persisting one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_redoProject redoA

Redo model edits undone with project_undo (Ctrl+Y). steps 1–20 (default 1). [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNoHow many steps (1–20, default 1)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the mutation profile is covered; the description is consistent with them and adds the redo-stack semantics plus the step-range limit. It does not explain what happens when the redo stack is empty or how 'steps' beyond the stack behaves, so it only modestly exceeds 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?

The core sentence is tight and front-loaded with the verb, scope and shortcut. The appended '[bulc-mcp rules] GEN-006...' line is procedural metadata that does not describe the tool itself and dilutes an otherwise clean definition.

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?

For a single-parameter, non-destructive redo operation with full schema coverage and annotations covering the safety profile, nothing essential to calling it correctly is missing. Only the edge-case behavior of an exhausted redo stack is left unaddressed.

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 coverage is 100% and the lone 'steps' parameter is fully documented in the schema (1–20, default 1); the description merely restates that range. Baseline 3 applies since the schema carries the parameter meaning.

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+resource ('Redo model edits') and explicitly ties the scope to its counterpart ('undone with project_undo'), so the redos-vs-undos distinction from the sibling tool is unambiguous. An agent can pick between project_redo and project_undo without opening either schema.

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?

The description gives clear context for when this applies (reversing edits previously undone with project_undo) and names the paired tool, effectively routing the agent. It stops short of explicit when-not-to-use guidance or disambiguation from other history-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_saveProject saveA
Idempotent

Save the open project as a .bulc bundle (.bulc + .fds + _evac.json + _spr.json + _hvac.json) like File > Save. Without path it saves to the current .bulc file. A new path must end with .bulc; an existing file is only replaced with overwrite=true. Saving renames CHID to the file name (GEN-009) — result files follow it. Live app only. [bulc-mcp] Writes files on this PC; overwrite=true only after the user agreed (GEN-014). [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAbsolute .bulc path (default: current project file)
overwriteNoAllow replacing an existing file at a new path (default false)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing side effects the hints do not capture: the CHID is renamed to the file name (GEN-009) and result files follow it, saving writes files on this PC, and overwrite=true is gated on prior user agreement (GEN-014). The idempotentHint=true claim is consistent with the described save semantics rather than contradicted by them.

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?

Dense but front-loaded: the core action and default behavior come first, then path/overwrite rules, then side effects and the write-permission caveat. The trailing rule-code references (GEN-006/010/016) are terse and require external lookup, which costs a little readability.

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?

For a 2-param save tool with annotations present and no output schema, the description covers default behavior, path validation, overwrite gating, side effects, and environment limits. It does not say what a successful call returns, and several cited rule codes are opaque without a bulc_knowledge_search lookup, leaving minor gaps.

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 coverage is already 100%, but the description adds real constraints the schema omits: a new path must end in .bulc, and replacement only occurs with overwrite=true. The default behavior of omitting path is restated rather than merely repeated, giving slightly more than the baseline 3.

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 and resource ('Save the open project') and enumerates exactly what the .bulc bundle contains, analogizing to 'File > Save'. This clearly separates it from export-shaped siblings like project_export_fds, shape_export_stl, and project_open.

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?

Gives concrete selection conditions: omit path to save over the current .bulc, supply a new path ending in .bulc to save elsewhere, and set overwrite=true only to replace an existing file. 'Live app only' is a useful precondition. It never names an alternative tool (e.g. project_export_fds) when a different output format is wanted, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_undoProject undoA

Undo the last model edit(s) of the fire model (obstacles, holes, vents, devices, settings …) like Ctrl+Z. steps 1–20 (default 1). Sprinkler/HVAC/evacuation module edits have their own tools. [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNoHow many steps (1–20, default 1)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the safety profile is covered. The description adds real scope context beyond that: which edit families are reverted, that batching is possible via steps, and that other modules are out of scope. It does not state whether an undo can itself be reverted, which would have completed the picture.

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 action and scope in the first two sentences, with the module carve-out immediately following. The trailing '[bulc-mcp rules]' reference is terse but purposeful, pointing the agent at knowledge lookups rather than being pure filler.

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?

For a one-parameter tool with annotations present and no output schema, the description supplies what is needed: affected scope, batch range, and sibling exclusions. Only the reversibility relationship with project_redo is unaddressed.

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 coverage is 100% and the single parameter already documents the 1–20 range and default of 1. The description repeats that same range without adding format or edge-case meaning, so it neither helps nor harms beyond the schema baseline.

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 (undo) and resource (last model edits of the fire model), enumerates the affected edit types (obstacles, holes, vents, devices, settings), and anchors the intent with the Ctrl+Z analogy. It also carves out scope by noting that sprinkler/HVAC/evacuation edits have their own tools, letting an agent separate this from shape_undo and the module-specific 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?

Gives a clear use condition ('like Ctrl+Z' for the last fire-model edits) and an exclusion for module edits, which is the key routing decision among these siblings. It stops short of naming project_redo as the counterpart action, so the reverse-direction choice is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_bndfRemove bndfB
Destructive

Remove an animated boundary quantity (&BNDF) by QUANTITY (and SPEC_ID/PART_ID when the entry has one).

ParametersJSON Schema
NameRequiredDescriptionDefault
part_idNo
spec_idNo
quantityYesBNDF QUANTITY to remove

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, and openWorldHint=false, so the safety profile is covered. The description adds target type and identifier semantics but does not describe irreversibility, failure behavior, or post-removal effects.

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?

Single front-loaded sentence that states action, target, and identifiers without filler.

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?

For a destructive remove tool with no output schema and sparse parameter descriptions, annotations carry the safety profile and the description identifies the target and keys. However, it omits prerequisites, behavior when no matching entry exists, and whether removal is permanent or undoable.

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 coverage is only 33%; only 'quantity' is documented in the schema. The description clarifies that quantity is the primary key and spec_id/part_id are used 'when the entry has one,' which adds useful conditional meaning, but it does not explain value formats or how the identifiers combine.

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 'Remove' and resource 'animated boundary quantity (&BNDF)' with identifying keys. It distinguishes from add_bndf/list_bndf by operation, though it does not name siblings.

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?

No explicit when-to-use, prerequisites, or alternatives are given. The parenthetical 'when the entry has one' only conditions optional identifiers, not selection among tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_controlRemove controlC
Destructive

Remove a CTRL control by ID. [bulc-mcp rules] DEVC-004, DEVC-006 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesControl ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered by structured data. The description adds no behavioral context beyond 'Remove' — it does not say whether the removal is reversible, whether it fails on unknown IDs, or what happens to devices that reference the control. The rule IDs function as an opaque pointer rather than disclosed behavior.

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?

The core sentence is maximally concise and front-loaded, but the trailing '[bulc-mcp rules] DEVC-004, DEVC-006 — bulc_knowledge_search "<id>"' block is poorly formed and ambiguous; it consumes space without clearly telling the agent what to do.

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?

For a single-parameter, annotated destructive mutation with no output schema, the minimum is met: the target and the identifier are clear and the annotations carry reversibility/safety. It is incomplete on dependents (what happens to devices bound to the removed control) and on failure modes such as an unknown ID.

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 100% and the single parameter 'id' is documented as 'Control ID to remove'. The description's 'by ID' matches the schema exactly and adds no syntax, format, or lookup guidance, so the baseline 3 applies.

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 verb and resource — 'Remove a CTRL control by ID' — which is unambiguous and immediately distinguishable from the sibling tools add_control and update_control. It stops short of explicitly naming those alternatives, but the operation itself needs no disambiguation.

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 explicit when-to-use/when-not-to-use guidance. The bracketed note points at rules DEVC-004/DEVC-006 and a bulc_knowledge_search lookup, which faintly implies a prerequisite check, but it is cryptic and never states the condition under which removal is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_deviceRemove deviceA
Destructive

Remove a single device by ID (or internal uid). With duplicate IDs, removes only the first match. [bulc-mcp rules] DEVC-001, DEVC-003, DEVC-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDevice ID (or uid) to remove

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false. The description adds real value beyond that by disclosing the duplicate-ID behavior (only the first match is removed), which concretely explains the non-idempotent mutation.

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 core action in one sentence followed by the duplicate-ID caveat. The trailing bulc rule fragment is terse but cryptic, slightly hurting readability.

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?

For a one-parameter removal tool with destructive annotations and no output schema, the description covers the essential behavior. It could still say whether removal is reversible or what happens if the ID is not found, but nothing critical is missing.

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 100% and the single parameter already documents 'Device ID (or uid) to remove.' The description's mention of ID/uid merely restates the schema, so the baseline 3 applies.

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: 'Remove a single device by ID (or internal uid).' An agent can tell this apart from add_device, update_device and list_devices, though it never names those siblings 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?

No when-to-use or when-not-to-use guidance versus update_device or the other remove_* siblings. The bulc rule reference (DEVC-001/003/004) implies a prerequisite check, but it is cryptic and never states the condition that selects this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_fireRemove fireB
Destructive

Remove a fire source by index (0-based). [bulc-mcp rules] FIRE-001, FIRE-002, FIRE-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYesFire index (0-based)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds a pointer to FIRE-001/002/003 rules and bulc_knowledge_search, hinting at governance constraints, but it never explains what those rules require or what removal does to dependent data (e.g., whether a plot/device is affected).

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 purpose is one short, front-loaded sentence. The second line is compact but oblique—an unexplained rule-id list and search reference that an agent cannot act on directly, costing a little clarity.

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?

For a single-parameter destructive tool whose annotations carry the safety profile and which has no output schema, the definition is minimally adequate. However, the referenced FIRE rules and bulc_knowledge_search are left unexplained, so an agent lacks the context for whether pre-checking is required before removal.

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 100% and the single parameter is documented as 'Fire index (0-based)', so the schema already carries the meaning. The description merely repeats the 0-based indexing without adding syntax, valid ranges, or bounds-checking behavior, matching the baseline for fully-covered schemas.

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 ('Remove a fire source') and its selector ('by index (0-based)'), which clearly contrasts with siblings add_fire and update_fire by implication of the verb. It does not explicitly name those siblings, so it falls just short of full differentiation.

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?

No statement of when to use this versus update_fire or remove_obstacle, and no prerequisites or conditions. The only directional hint is the cryptic '[bulc-mcp rules] ... bulc_knowledge_search' fragment, which does not explain the triggering context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_geomRemove geomB
Destructive

Remove a &GEOM entry by ID (see list_geoms).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGEOM ID to remove

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the agent knows this is a permanent mutating delete. The description adds no behavior beyond the structured fields: it does not say the deletion is irreversible, whether an undo/project_undo applies, or what happens if the ID is not found or is referenced elsewhere.

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 zero filler and the reference to list_geoms placed after the core action. It is efficient, though the terseness leaves useful safety context 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?

For a one-parameter, no-output-schema delete tool whose annotations already carry the destructive profile, the description is minimally adequate. It omits any note on irreversibility or recovery via project_undo, which are the main remaining gaps an agent would care about.

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 100% with a single well-documented 'id' parameter, so the baseline is 3. The description's 'by ID' plus the pointer to list_geoms adds only mild value about where a valid ID comes from, without format or validation details.

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 ('Remove') and resource ('a &GEOM entry') plus the identification key ('by ID'), which separates it cleanly from the read-only sibling list_geoms. It does not distinguish itself from the many other remove_* tools in the sibling set, so it lands just short of 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(see list_geoms)' implies the workflow: enumerate geoms first to obtain the ID you pass in. That is helpful implicit guidance, but there is no explicit when-to-use/when-not, no warning about destructive deletion, and no mention of alternatives such as shape_export_geom or project_undo.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_holeRemove holeC
Destructive

Remove a hole by ID. [bulc-mcp rules] EVAC-002, GEO-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHole ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered structurally. The description adds only a cryptic rule-code reference (EVAC-002, GEO-004) that is never explained; it does not state permissions required, cascade effects on the parent obstacle, or reversibility beyond what annotations imply.

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 core sentence is one front-loaded line with no waste. The appended bracketed rule-code string is terse but cryptic rather than explanatory, marginally weakening structure.

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?

For a destructive mutation with an unclear relationship to parent geometry, the description says nothing about preconditions, what else changes when a hole is removed, or whether the operation is recoverable. Annotations cover the safety profile but not the operational consequences, leaving a real gap.

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 100% and the single 'id' parameter is documented in the schema as 'Hole ID to remove'. The description's 'by ID' merely echoes that, adding no format or lookup guidance, so the baseline 3 applies.

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 (remove) and resource (hole) with the keying parameter (by ID), which inherently distinguishes it from sibling add_hole and update_hole. It does not, however, explicitly name any alternative or scope of effect.

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?

No when-to-use, when-not-to-use, or alternative guidance is given. The bracketed '[bulc-mcp rules] EVAC-002, GEO-004' line is an opaque internal reference, not actionable guidance for choosing this tool or for precondition checks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_materialRemove materialB
Destructive

Remove a material by ID. [bulc-mcp rules] SURF-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMaterial ID to remove

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered. The description adds only the SURF-001 knowledge-search pointer; it does not say what happens to surfaces or other objects referencing the material, whether removal can fail, or whether it is reversible.

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 short sentence front-loads the verb and resource, with the rule reference appended. Minimal waste, though the bracketed rule syntax is terse enough to be ambiguous to an agent unfamiliar with the convention.

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?

For a destructive one-parameter tool with no output schema, annotations cover the mutation risk, but the description omits referencing behavior (e.g. materials in use by surfaces) and only gestures at a pre-check rule. Adequate but clearly incomplete.

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?

There is a single required parameter with 100% schema description coverage ('Material ID to remove'), which matches the description's 'by ID'. The schema does the heavy lifting, so the baseline of 3 applies.

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 (Remove) and resource (material) plus the selection key (by ID), which distinguishes it from add_material and update_material. It does not, however, explicitly contrast itself with sibling removal tools or clarify scope (e.g. whether dependencies are affected).

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?

The only usage signal is the appended rule tag pointing at SURF-001 and bulc_knowledge_search, which implies a prerequisite check before deletion. That is helpful but cryptic — no condition is stated for when to delete vs. update a material, and no exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_obstacleRemove obstacleC
Destructive

Remove an obstacle by ID. [bulc-mcp rules] GEN-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesObstacle ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered by structured data. The description adds no context beyond that: it doesn't say what happens to dependent geometry, whether the removal is reversible/undoable, or what an agent should do if the ID is missing.

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?

The core sentence is tight and front-loaded, but the appended '[bulc-mcp rules] GEN-003 — bulc_knowledge_search "<id>"' fragment is unexplained boilerplate that consumes space without clarifying the tool's use.

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?

For a one-parameter destructive delete with annotations covering the safety profile and no output schema, the description is minimally adequate. It omits any note about cascading effects on related objects or failure behavior, which would be the useful additions here.

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 coverage is 100% and the single 'id' parameter is fully documented in the schema, so the description's 'by ID' phrasing is redundant. Baseline 3 applies when the schema does the heavy lifting.

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 ('Remove an obstacle by ID') that is immediately distinguishable from sibling reads like list_obstacles. It does not, however, differentiate itself from related mutators such as update_obstacle, transform_obstacle, or remove_geom.

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?

No when-to-use guidance, no preconditions, and no mention of alternatives such as update_obstacle or transform_obstacle when the intent is modification rather than deletion. The cryptic '[bulc-mcp rules] GEN-003' line is not actionable usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_propRemove propA
Destructive

Remove a &PROP model by ID. Devices referencing it fall back to solver defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPROP model ID to remove

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds genuinely useful non-annotation context: referencing devices fall back to solver defaults, which is exactly the kind of side-effect an agent needs before deleting. It stops short of saying whether the removal is undoable or requires confirmation, so not a 5.

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, zero filler, with the identity/operation front-loaded and the consequence immediately after. Nothing to cut.

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?

For a single-parameter destructive tool with no output schema, the description covers both the action and its cascade effect on devices, which is what an agent most needs. It omits irreversibility and any precondition on referencing devices, leaving a small gap for a destructive operation.

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?

Only one parameter and schema description coverage is 100% ("PROP model ID to remove"), so the schema already carries the semantics. "By ID" in the description restates rather than extends this. Baseline 3 applies.

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?

Specific verb (Remove) plus specific resource (&PROP model) plus the keying parameter (by ID). It is trivially distinguishable from the sibling mutators add_prop and update_prop, and the second sentence clarifies the resource's role in the model.

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 delete versus update or re-parameterize a PROP, no prerequisites, and no mention of undo. The intent is inferable from the verb, but the description offers no routing guidance against siblings like update_prop, remove_device, or shape_undo.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_rampRemove rampC
Destructive

Remove a ramp by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRAMP ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds only "by ID", which is already in the schema, and says nothing about irreversibility, behavior on a missing ID, or effects on surfaces/references that depend on the ramp.

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 short sentence with the target resource front-loaded and zero filler. It is efficient, though the brevity is partly under-specification rather than deliberate compression.

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?

For a one-parameter deletion tool whose annotations already flag destructiveness, the description is minimally adequate. It nonetheless omits what the caller should know before deleting, and there is no output schema to cover return or failure behavior.

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 100% and the single parameter is documented as "RAMP ID to remove". The description's "by ID" is a restatement rather than added meaning, so the baseline 3 applies.

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 ("Remove a ramp by ID"), which is unambiguous and clearly distinct from the sibling add_ramp and update_ramp by verb alone. It does not explicitly name those siblings, but the action is unmistakable.

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?

No when-to-use or when-not-to-use guidance, no prerequisites, and no mention of alternative tools such as update_ramp for modifying rather than deleting. The agent must infer everything about selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_raw_namelistRemove raw namelistA
Destructive

Remove a raw namelist line by its index from list_raw_namelists. [bulc-mcp rules] GEN-016, SIM-002, FIRE-009 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes0-based index from list_raw_namelists

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false and non-idempotency, so the safety profile is covered. The description adds only the index-based targeting (which duplicates the schema) plus a pointer to governing bulc rules; it does not say what is lost, whether the removal is undoable, or how later indexes shift, which is the main behavioral risk of positional deletion.

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, single-sentence purpose, with the rule citation kept short on a second line. The '[bulc-mcp rules] ... bulc_knowledge_search "<id>"' fragment is terse but reads like template leakage and costs a little clarity.

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?

For a one-parameter destructive line removal with annotations carrying the safety profile and no output schema, purpose plus parameter plus governing-rule pointer is close to sufficient. The remaining gap is the absent note on index shifting after deletion, which an agent calling it repeatedly would need.

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 100% and the single parameter already documents itself as a '0-based index from list_raw_namelists'. The description restates this without adding format, bounds, or error behavior, so the baseline 3 applies.

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 ('Remove') and a precise resource ('a raw namelist line by its index'), and names the source list it operates on. An agent can separate this from the many other remove_* siblings (remove_bndf, remove_obstacle, remove_surface) without opening any schema.

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 rather than stated: referencing list_raw_namelists tells the agent it must enumerate first to obtain an index. There is no explicit when-to-use vs. alternative (e.g. add_raw_namelist), no prerequisites, and no guidance on repeated removals or index invalidation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_slcfRemove slcfC
Destructive

Remove a slice file output by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSLCF ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say whether the removal is permanent, whether it touches disk artifacts, or what happens on an invalid ID.

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 wasted words. It is lean in a way that reads as terse rather than padded, though the terseness is also what leaves the gaps noted elsewhere.

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?

For a one-parameter delete tool whose annotations already carry the destructive/non-idempotent profile, the definition is minimally adequate. It omits error behavior on unknown IDs and any note on reversibility, which an agent would still want.

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 coverage is 100% and the single id parameter is already documented as 'SLCF ID to remove'. The description's 'by ID' merely corroborates the schema and adds no format or sourcing detail beyond it, so the baseline 3 applies.

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 (Remove) and resource (slice file output by ID), which lets an agent distinguish it from list_slcf, add_slcf, and update_slcf. It stops short of explicitly naming those siblings or clarifying scope (e.g. whether it deletes the underlying output file), so it lands just below the top tier.

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 when-to-use guidance, no prerequisites, and no mention of alternatives such as update_slcf or list_slcf. The intent is only implied by the verb itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_speciesRemove speciesC
Destructive

Remove a tracked species by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSpecies ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered structurally. The description adds only the word 'tracked' and the word 'by ID' (already in the schema); it says nothing about irreversibility, whether an undo is possible, or what happens to dependent objects such as reactions referencing this species.

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 short sentence with the key information front-loaded and no filler. It is efficient, though the extreme brevity is what leaves the behavioral gaps 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?

For a destructive, non-idempotent mutation with no output schema, the description omits whether the deletion is reversible, whether dependent references break, and what the result looks like. A single sentence is not sufficient context for a delete operation in a simulation model.

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?

With a single parameter at 100% schema description coverage, the schema already documents 'id' as 'Species ID to remove'. The description's 'by ID' restates this rather than adding format, source, or lookup guidance, so the baseline 3 applies.

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 verb and resource ('Remove a tracked species') with the lookup key ('by ID'), which cleanly separates it from add_species and update_* siblings. It doesn't explicitly name an alternative, but the action 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?

No guidance on when to use this versus update_species, or whether removal is intended only for species no longer referenced by a reaction. No prerequisites or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_surfaceRemove surfaceA
Destructive

Remove a general surface (&SURF) by ID. Objects referencing it fall back to INERT. [bulc-mcp rules] SURF-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSurface ID to remove

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds genuine value beyond that by disclosing a cascade side effect — objects referencing the surface fall back to INERT — which the annotations do not convey.

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 core action is front-loaded in one tight sentence. The trailing '[bulc-mcp rules] SURF-001 — bulc_knowledge_search' line is compact but cryptically formatted and slightly interrupts flow, keeping it from a full 5.

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?

For a single-parameter destructive tool with no output schema and annotations that cover safety, the description supplies the essential what and the cascade consequence. It stops short of noting reversibility/undo availability (project_undo/shape_undo exist), which would complete the picture.

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 coverage is 100% and the sole parameter's 'Surface ID to remove' description is already complete. The phrase 'by ID' in the description adds nothing beyond the schema, so the baseline 3 applies.

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+resource ('Remove a general surface (&SURF) by ID'), which is unambiguous and immediately distinguishes it from add_surface/update_surface in the sibling set. The parenthetical object-type notation further pins down the resource.

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 verb and the object-type notation, and the rule reference points to a knowledge lookup, but there is no explicit when-to-use vs. alternatives guidance (e.g., when to update vs. remove a surface, or relationship to update_surface/assign_surface).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_ventRemove ventB
Destructive

Remove a vent by ID. [bulc-mcp rules] VENT-002, VENT-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVent ID to remove

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false, so the safety profile is covered. The description adds the non-obvious detail that vent removal is governed by specific buLC rules requiring a knowledge lookup, which is genuinely beyond the annotations, but it says nothing about cascade effects on FDS namelists or failure modes.

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?

Two lines, action first, no padding. The rules tag is dense and slightly opaque, but it is not wasted text since it encodes a precondition.

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?

For a destructive single-parameter mutation with no output schema, the essentials (what is removed, by what key, which rules govern it) are present. Missing is any statement of prerequisites, side effects, or what the tool returns, which an agent calling a destructive operation would benefit from.

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?

Only one parameter and schema description coverage is 100% ('Vent ID to remove'), so the schema already carries the meaning. The description's 'by ID' restates rather than enriches it; baseline 3 applies.

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 ('Remove a vent') plus the keying mechanism ('by ID'), and the title/schema corroborate it. It doesn't distinguish itself from the many other remove_* siblings (remove_bndf, remove_obstacle, remove_hole), but the resource 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The bracketed line points at rules VENT-002/VENT-004 and a lookup tool (bulc_knowledge_search "<id>"), which implies a pre-removal compliance check. However, it never states when to use this versus update_vent, list_vents, or add_vent, and the routing hint is cryptic rather than explanatory.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_add_graph_probeResult add graph probeB

Add a graph probe to extract time-series data. type=point needs xyz; type=line needs start & end. slot: primary or compare.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
xyzNo
slotNo
typeYes
startNo

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and non-idempotency, so the safety profile is covered. The description adds nothing beyond that—no mention of whether probes accumulate, whether duplicate probes are allowed, or what conditions enable this operation—leaving behavioral gaps for a mutating tool.

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?

Three short sentences, front-loaded with the action and then the parameter rules; no wasted words, and the critical conditional schema is packed into a compact form.

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?

For a mutation tool with no output schema, the description is adequate for calling it correctly but thin on context: it doesn't say when probes are useful, whether an existing result must be active, or how added probes appear. It covers invocation but not the surrounding workflow.

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?

With 0% schema description coverage, the description must carry parameter meaning, and it does: it explains that type=point requires xyz while type=line requires start and end, and that slot is primary or compare. This effectively documents the conditional requirements across all five parameters, though it omits point coordinate format details.

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 verb and resource ('Add a graph probe to extract time-series data'), which is clearly distinguishable from siblings such as result_clear_graph_probes or result_set_time. It does not explicitly name an alternative, but the purpose 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent what each type needs (point→xyz, line→start & end) and the slot values, which implicitly guides correct invocation. However, it never states when to use this tool versus alternatives, nor any prerequisites (e.g. a result must be loaded).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_clear_graph_probesResult clear graph probesB
Destructive

Remove all graph probes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the mutation profile is covered structurally. The description contributes the scope detail that ALL probes are removed rather than a selected subset, but says nothing about confirmation, undo, or side effects on an active view. No contradiction with annotations.

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?

A single four-word sentence that front-loads the action and object with zero filler. Nothing is wasted and nothing relevant is buried.

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?

For a parameterless destructive operation with no output schema, the description is minimally adequate but thin: it does not indicate whether the clear is undoable, whether it affects only the current probe set, or what the caller should do afterward. An agent would be able to invoke it, but not confidently.

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 of 4 applies. The description's 'all' quantifier correctly signals there is no selection parameter to narrow the deletion.

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 ('Remove') and resource ('graph probes') with the scope qualifier 'all', which distinguishes it from result_add_graph_probe. It does not explicitly name the sibling as a counterpart, but the clear add/clear pairing in the tool name makes the purpose 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?

There is no guidance on when to use this versus alternatives, no mention of prerequisites, and no warning about the destructiveness or irreversibility of clearing every probe at once. The agent must infer usage entirely from the name and annotations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_get_stateResult get stateA
Read-onlyIdempotent

Get the result viewer current state: active dataset, current time, colormap, legend range, playback, particles, view-lock, graph probe count. Read this before setting values.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds useful behavioral content by listing exactly which state values are read and by advising it be called before mutation, though it gives no format/units detail for those values.

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 tight sentences, front-loaded with the verb and resource, then the returned fields and the sequencing cue. No filler.

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 output schema and no parameters, the description carries the return-value burden and does list the state categories an agent needs. It could go further on value formats/units but is sufficient for correct invocation.

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 schema has nothing to document; per the baseline for 0-param tools this is a 4. The description correctly adds no parameter claims that could conflict.

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 and resource ('Get the result viewer current state') and enumerates the exact state components returned (active dataset, time, colormap, legend range, playback, particles, view-lock, graph probe count). This clearly distinguishes it from the many result_set_* sibling setters.

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?

"Read this before setting values" gives an explicit sequencing guideline that points at the result_set_* family. It stops short of naming specific sibling alternatives or stating when-not to use it, so it is clear context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

results_detectResults detectB
Read-onlyIdempotent

Find the result files of a deck (named by its &HEAD CHID, next to the .fds): .smv, _hrr.csv, _devc.csv, _ctrl.csv, .out, and list the slice planes (quantity + plane), Plot3D times / quantities, Smoke3D, boundary and particle files. Read-only. [bulc-mcp rules] GEN-010, ASET-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
fdsPathNoAbsolute .fds path (default: the project deck / last run)

TDQS

B3.1/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, and the description merely restates 'Read-only.' It does add value by disclosing the concrete inventory content (slice quantities/planes, Plot3D times, Smoke3D, boundary and particle files), but says nothing about failure modes when no run exists or how partial output is handled.

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?

The core sentence is front-loaded and reasonably efficient despite the long file enumeration. The trailing '[bulc-mcp rules] GEN-010, ASET-004' bullet is metadata noise that doesn't help an agent call the tool and slightly dilutes the definition.

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?

With no output schema, the description carries the burden of describing returns, and it does enumerate the file categories it reports. Still, it omits any indication of structured vs. textual output, error behavior when the deck has not been run, and how the listed artifacts differ from what fire_results_summary or result tools return for a one-parameter tool in a dense 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 coverage is 100%, so the fdsPath parameter and its default are already documented in the schema. The description adds only a little surrounding context (&HEAD CHID naming, adjacency to the .fds file) and no path-format or fallback details beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

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: find result files for a deck and list slices, Plot3D times, Smoke3D and boundary/particle files. It enumerates the exact artifacts (.smv, _hrr.csv, etc.), so the agent knows this is an output-inventory tool. However, it never names the near-neighbor result readers (fire_results_summary, result_get_state) that an agent might confuse it with.

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 explicit when-to-use or when-not-to-use statement, nor any named alternative among the many result-related siblings. The only hint is implicit: results exist next to the .fds after a run. An agent must infer that this is a discovery step preceding analysis tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_set_active_datasetResult set active datasetA
Idempotent

Select the active result dataset by id. Node id shapes: slcf- (slice), pl3d-var- (3D data), s3d- (smoke), bndf- (boundary surface, .bf), prt5- (particles), csv-hrr / csv-devc (time series).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes데이터셋 id

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the mutation/idempotence profile is covered without contradiction. The description adds no behavioral context beyond that: it never says what changes after selection (view state, dependent graphs/slices) or what happens if an unknown id is passed.

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 sentences, zero filler. The action is front-loaded and the id taxonomy follows as a compact enumerated reference. Nothing is repeated from the schema or annotations.

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?

With no output schema there is no return-value burden, and annotations cover the safety profile, so the definition is close to sufficient. It is still silent on the downstream effect of switching datasets and on error behavior for invalid ids, which matters for a single-parameter state-setting tool.

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 coverage is 100%, but the schema's own description is a bare '데이터셋 id'. The description supplies the real semantic content: the id prefix taxonomy (slcf-, pl3d-var-, s3d-, bndf-, prt5-, csv-hrr/csv-devc) that tells the agent which id strings are valid for which data type. That is genuine added value above the schema baseline.

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: 'Select the active result dataset by id.' An agent immediately knows this sets which dataset the result view displays. It does not, however, differentiate itself from nearby result tools such as result_set_particles or results_detect.

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 (pick which dataset is active before inspecting results) but there is no explicit when-to-use, when-not-to-use, or named alternative. The id-shape list indirectly scopes which inputs are legal, which is the only guidance present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_set_colormapResult set colormapC
Idempotent

Set the result colormap. name: 'turbo'|'jet'|'inferno'|'viridis'|'grayscale'.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes컬러맵
reversedNo색상 반전

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotent=true, destructive=false, readOnly=false and openWorld=false, so the safety profile is covered. The description adds no further behavior: it does not say whether the colormap applies globally or per-plot, whether it persists, or what the second parameter does. It slightly duplicates the schema enum instead of adding context.

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?

Two short, front-loaded sentences with no filler. It is efficient, though the enum repetition earns little and the omission of 'reversed' reads as under-specification rather than deliberate brevity.

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?

The tool is simple and has no output schema, so little prose is strictly required. Still, an agent gets no signal about scope (global vs per-graph) or the purpose of the 'reversed' flag, which is the only non-obvious part of the operation.

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 100%, so baseline is 3. The description re-lists the enum values already present in the schema and completely omits the optional 'reversed' parameter, so it adds no meaning beyond the structured data.

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 ('Set the result colormap'), which is unambiguous on its own. However it does not differentiate itself from the crowded result_* family (result_set_legend_range, result_set_active_dataset, etc.), so an agent must infer scope from the schema rather than the text.

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 guidance on when to call this versus the other result_set_* tools, nor any prerequisite (e.g. whether results must be loaded, or whether a dataset must be active first). The description only restates the operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_set_legend_rangeResult set legend rangeB
Idempotent

Set the result colorbar (legend) min/max range. Use null for auto.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNo범례 최대 (null=자동)
minNo범례 최소 (null=자동)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond that - it does not say whether results must be loaded, whether the range is per-dataset, or what effect it has on the view.

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 sentences, action and parameter hint, front-loaded with zero filler. Sized correctly for a trivial two-optional-parameter setter.

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?

For a simple idempotent setter with full schema coverage and no output schema, the description is minimally viable. It omits any precondition (results loaded / active dataset) that an agent would need to call it correctly in the results workflow.

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 100% and both params already document 'null=auto' (null=自動), so the description's 'Use null for auto' merely restates the schema. Baseline 3 is appropriate when the schema does all 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?

States a specific verb ('Set') and resource ('result colorbar (legend) min/max range'), which is precise enough to separate it from the sibling result_set_colormap. It does not explicitly name that sibling or draw the boundary, so it falls short of 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?

The only guidance is 'Use null for auto', which is a parameter note, not a when-to-use cue. Nothing says when to set a manual range versus leaving auto, or how this relates to result_set_colormap / result_set_active_dataset.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_set_particlesResult set particlesC
Idempotent

Configure particle rendering in the result viewer.

ParametersJSON Schema
NameRequiredDescriptionDefault
visibleNo
pointSizeNo
renderModeNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the agent knows this mutates viewer state safely and repeatably. The description adds that the mutation targets particle rendering specifically, but says nothing about whether the setting applies immediately, persists across sessions, or is scoped to the current result set.

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 filler. It is efficient, though its brevity is as much under-specification as conciseness given the undocumented parameters.

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?

For a rendering-configuration tool with three undocumented parameters and no output schema, the description is too thin. It does not say whether settings apply to the active dataset, whether all parameters are optional and default to the current values, or what visual effect each render mode produces.

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?

All three parameters (visible, pointSize, renderMode) have 0% schema description coverage, and the description names none of them. With the enum values (points/sprite/sphere) and pointSize having no units or valid range, the description was the only place to compensate 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?

Specific verb (Configure) plus resource (particle rendering in the result viewer) tells the agent exactly which subsystem is affected. It does not differentiate itself from close siblings like result_set_colormap or result_set_active_dataset, 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?

There is no when-to-use guidance, no prerequisites, and no mention of the other result_* viewer tools. The agent must infer from the name alone that this is the tool for toggling/sizing particles rather than, say, colormaps or probes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_set_playback_speedResult set playback speedB
Idempotent

Set result animation playback speed (1.0 = real-time).

ParametersJSON Schema
NameRequiredDescriptionDefault
speedYes재생 속도 배율

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description carries a lower burden. The only addition is the '1.0 = real-time' reference, which is value interpretation rather than behavioral disclosure; nothing is said about effects on a running animation or persistence. No contradiction with 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 wasted words, well matched to a one-parameter setter. It is terse to the point of omitting usage context, but the structure itself is clean.

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?

For a minimal one-parameter setter with annotations covering the safety profile and no output schema, the description supplies enough to invoke it correctly. Only the lack of any usage/routing context keeps it from being fully complete.

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 coverage is 100% with a single 'speed' parameter, and the description adds a meaningful anchor ('1.0 = real-time') that clarifies the scale beyond the terse schema text. This is a genuine semantic addition over the structured field, though it stops short of giving example values or bounds.

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 verb ('Set') and resource ('result animation playback speed'), making the operation unambiguous. It does not, however, distinguish itself from closely related siblings like result_toggle_playback or result_set_time, which an agent might confuse it with.

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 explicit when-to-use guidance, no prerequisites, and no named alternative such as result_toggle_playback. Usage is only weakly implied by the 'playback speed' phrasing, so the agent is left to infer context entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_set_timeResult set timeB
Idempotent

Set the result viewer playback time (seconds).

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYes재생 시점 (초)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose non-destructive, idempotent, closed-world behavior, so the safety profile is covered. The description adds only the '(seconds)' unit; it does not say whether setting a time outside the loaded range is clamped or errors, nor whether playback must be paused first.

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?

A single eight-word sentence with the action and the unit front-loaded; nothing is redundant or padding.

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?

For a one-parameter setter with annotations covering safety and no output schema, the description is nearly sufficient. It only leaves open edge-case behavior (out-of-range values, interaction with the playback toggle), which is minor for this tool's complexity.

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 100% and the single 'time' parameter carries its own unit description ('재생 시점 (초)'), so the schema does the heavy lifting. The description's '(seconds)' merely echoes the schema rather than adding constraints, ranges, or format detail.

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 ('Set') plus the resource and scope ('result viewer playback time'), which distinguishes it from the nearby result_set_playback_speed and result_toggle_playback siblings. It does not explicitly name those alternatives, but the resource is concrete enough for correct selection.

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 guidance on when to use this versus result_toggle_playback, result_set_playback_speed, or result_add_graph_probe, and no prerequisites (e.g. results must be loaded) are stated. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_set_view_lockedResult set view lockedB
Idempotent

Lock/link the result view for side-by-side compare (true = linked).

ParametersJSON Schema
NameRequiredDescriptionDefault
lockedYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the mutation/idempotency profile is covered. The description adds the linking behavior ("true = linked"), which is genuine context, but says nothing about what state changes or what the toggle affects.

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 compact sentence with the toggle semantics parenthesized at the end. Front-loaded and free of filler, though the "Lock/link" duality makes the opening slightly ambiguous.

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?

For a one-parameter toggle whose annotations already carry the safety profile, the description is roughly sufficient to call it. It stops short of describing the effect of the toggle or the return, so it is minimally complete rather than thorough.

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 coverage is 0% and the schema only types the parameter as boolean. The description compensates by explaining "true = linked" — the key semantic for the single parameter — but leaves the false case and the exact link target to inference. Partial compensation for a 1-param tool.

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?

"Lock/link the result view for side-by-side compare" gives a specific verb (lock/link) and resource (result view) with the intended context. It does not explicitly distinguish itself from sibling result_* tools (colormap, legend, time), but the toggle semantics are clear enough to identify the tool.

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?

"for side-by-side compare" implies the usage context, giving the agent a reason to invoke it. However, there is no explicit when/when-not guidance and no reference to alternative result_* tools that might be confused with it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

result_toggle_playbackResult toggle playbackB

Toggle play/pause of the result animation.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the full safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), and the description essentially restates the tool name without adding anything. It doesn't disclose what happens if no animation is loaded, whether toggling has side effects on a running simulation, or any preconditions. With annotations present the bar is lower, but this sentence contributes nothing beyond the name.

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 front-loaded sentence with no waste. It is efficient, though it is so terse that it borders on under-specification rather than earning full marks for structure.

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?

For a no-param, no-output-schema control tool this is the minimum viable level. It omits preconditions (a loaded result, a selected view) and the relationship to the adjacent playback/time tools, which an agent would need to invoke it confidently.

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 there is nothing for the description to disambiguate. Per the rubric, a 0-parameter tool baselines at 4.

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 verb and resource: 'toggle play/pause of the result animation.' That cleanly distinguishes it from siblings like result_set_playback_speed or result_set_time, which modify parameters rather than flipping play state. However, it never explicitly names those siblings, so it stops short of 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 when-to-use guidance at all. The description doesn't say whether a result must already be loaded, whether this acts on the active view or all views, or how it relates to result_set_time/result_set_playback_speed. The agent is left to infer the calling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_simulationRun simulation (guarded)A

Guarded run for any BULC version: writes the project open in BULC to Documents/bulc_<folder_name> and starts the simulation. Before starting, this server runs the app's validate_project and refuses to start when it reports errors (점검 실패) — fix them first. When the app lists sim_preflight / sim_start (BULC 0.90+), prefer sim_preflight → user confirmation → sim_start {confirm: true}: they also check output intervals and grid resolution and write the deck next to the saved project. Summarise the conditions (mesh, fire, T_END, outputs, solver) and get the user's go-ahead before calling (GEN-016). Use a new folder_name per scenario (GEN-019). 실행 전에 validate_project 를 자동으로 돌리고, 오류가 있으면 실행하지 않습니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_nameNoRun folder name (defaults to the project CHID). Use one per scenario.
solver_typeNogpu (default) | gpu_cutcell (beta, if your app build has it) | cpu_openmp (FDS 6.10.1 on the CPU)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false), disclosing that the server auto-runs validate_project and refuses to start on errors (점검 실패), where the deck is written, and that sim_preflight additionally checks output intervals and grid resolution. That is exactly the mutation-safety context the annotations cannot express.

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 core behavior and the refusal condition are front-loaded and each sentence carries routing or pre-condition value. The trailing Korean sentence restates the validate_project/refuse-to-run behavior already given in English, which is the only redundant element in an otherwise dense paragraph.

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?

For a no-output-schema mutation tool, it covers inputs, pre-conditions, side effects, and the preferred tool chain, plus the user-approval gate. The one gap is post-call behavior: it never says the run is asynchronous or points the agent at sim_status/sim_log_tail to follow progress.

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 coverage is 100%, so the baseline is 3. The description adds real meaning beyond the schema by explaining how folder_name is used (write destination Documents/bulc_<folder_name>, one per scenario per GEN-019); solver_type is left entirely to the enum descriptions, which is acceptable given full schema coverage.

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+resource and a distinguishing scope ('Guarded run for any BULC version') plus the side effect of writing the project to Documents/bulc_<folder_name> and starting the simulation. It explicitly contrasts itself with the sim_preflight/sim_start siblings, so an agent can tell them apart without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative path and the condition that selects it ('When the app lists sim_preflight / sim_start (BULC 0.90+), prefer sim_preflight → user confirmation → sim_start'), and gives the fallback when those tools don't exist. It also states prerequisites (fix validation errors first; get user go-ahead per GEN-016) and a scoping rule for repeated use (new folder_name per scenario, GEN-019).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_all_boundaries_openSet all boundaries openB
Idempotent

Set all 6 domain faces to OPEN (or selectively by providing a list of faces). [bulc-mcp rules] EVAC-002, VENT-002, VENT-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
facesNoFaces to open (default: all 6)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds the meaningful domain fact that 'faces' are the 6 mesh boundary planes and that omitting the argument defaults to all of them, but says nothing about effect on the FDS input deck or existing boundary/surface assignments.

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 core instruction is front-loaded in a single efficient sentence with no redundancy. The trailing '[bulc-mcp rules] EVAC-002, VENT-002, VENT-004 — bulc_knowledge_search "<id>"' tag is cryptic clutter, but it is compact and plausibly actionable.

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?

For a single-optional-parameter mutation tool with annotations covering safety and a fully documented schema, this is close to sufficient. It still omits the sibling distinction and any statement of downstream effect on the simulation, which are the remaining gaps an agent would face.

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 100%, including the enum of face tokens and the 'default: all 6' note, so the description merely restates what the schema already provides. Baseline 3 applies when structured data carries the parameter burden.

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 concrete verb and resource ('Set all 6 domain faces to OPEN') plus the selective variant, so the agent knows exactly what the tool mutates. However, it never distinguishes itself from the very similar sibling 'set_open_boundary', so the agent cannot tell which tool to reach for without inspecting both schemas.

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?

The parenthetical 'or selectively by providing a list of faces' implies when to use the no-arg vs. list-arg form, and the EVAC/VENT rule references hint that compliance context exists. But there is no explicit guidance on when this tool should be preferred over 'set_open_boundary', which covers similar ground.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_ambientSet ambientA
Idempotent

Set the ambient (initial atmosphere) conditions written to &MISC: TMPA (ambient temperature °C), HUMIDITY (%RH), Y_CO2_INFTY (background CO2 mass fraction). The GPU engine reads all three. Use extra for any other &MISC key you need to carry (e.g. P_INF, GVEC) — it is written verbatim. Pass null for a key to drop it and fall back to the FDS default (TMPA 20°C, HUMIDITY 40%). [bulc-mcp rules] GEN-016, SIM-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
tmpaNoAmbient temperature [°C] (FDS default 20)
extraNoRaw &MISC entries as 'KEY=VALUE' (e.g. ["P_INF=101325."]). Replaces any entry with the same KEY.
humidityNoRelative humidity [%] (FDS default 40)
y_co2_inftyNoBackground CO2 mass fraction (FDS default 0.000595)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=false, so the safety profile is covered. The description adds real behavioral context beyond that: null drops a key to the FDS default (with the default values), `extra` is written verbatim and replaces same-KEY entries, and the GPU engine consumes all three fields.

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?

Three tight sentences, front-loaded with the primary keys before the `extra` escape hatch and the null rule. The bracketed rules footer (GEN-016, SIM-002) is compact but slightly cryptic out of context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter, no-output-schema setter with full schema coverage, the description supplies the defaults, the null-drop fallback, the verbatim-write contract, and the downstream consumer, leaving nothing an agent needs in order to call it correctly.

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 coverage is 100%, so the baseline would be 3, but the description adds meaning the schema lacks — the collective null semantics ('pass null for a key to drop it and fall back to default') and the verbatim replacement behavior of `extra` are stated at the tool level rather than per-field.

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+resource ('Set the ambient conditions') and enumerates exactly which &MISC keys are written (TMPA, HUMIDITY, Y_CO2_INFTY), so an agent can distinguish it from siblings like set_run_options, set_numerics, or set_time without opening the schema.

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?

Gives clear conditional guidance on parameter routing ('use `extra` for any other &MISC key', 'pass null to drop a key and fall back to the FDS default') and routes to bulc_knowledge_search for the cited rules. It does not, however, name alternatives or state when NOT to use this tool versus other set_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_chidSet chidA
Idempotent

Set the simulation CHID (Case Heading Identifier) and optional title. Note: when the project is saved, CHID is normalized to the .fds file name (so output files such as .smv match the deck file); a CHID set here only persists until the next save. [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
chidYesCase ID (no spaces, used for output filenames)
titleNoOptional descriptive title

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (non-read-only, idempotent, non-destructive), but the description adds a genuinely non-obvious side effect: on save the CHID is normalized to the .fds deck filename, so a value set here is transient. That is real behavioral disclosure 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The two prose sentences are front-loaded and earn their place, but the trailing '[bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search "<id>"' line is opaque boilerplate whose intent is not decodable from the description alone.

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?

For a two-parameter mutation with full schema coverage, annotations, and no output schema, the description covers purpose, the key side effect, and the persistence limit. Only the rules-reference line leaves anything unstated.

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 coverage is 100%, so both parameters are already documented in the schema. The description restates that CHID is the Case Heading Identifier and that output filenames depend on it, adding only marginal meaning beyond the schema's own text.

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 — setting the simulation CHID (spelled out as Case Heading Identifier) plus an optional title. No sibling tool competes for this resource, so explicit differentiation isn't required, though none is offered.

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?

The persistence caveat ('CHID set here only persists until the next save') tells the agent when this setting actually matters versus when it will be overwritten. No alternatives are named, but there is no obvious competing tool for this operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_fds_propertiesSet fds propertiesA
Idempotent

Update an obstacle's Runtime FDS Properties. Merge ANY fds_override fields and/or set is_fire_source/hrrpua/surf_ids. fds_override examples — fire: hrrpua_override, tmp_front, ramp_points, fire_area, fire_faces, ext_coeff; fuel/REAC: fuel_type, reac_co_yield, reac_soot_yield, reac_hcn_yield, reac_radiative_fraction; heat detector: activation_temp, rti, initial_temp; smoke: alpha_e, beta_e, alpha_c, beta_c; thermocouple: bead_diameter, emissivity, tc_density, specific_heat; sprinkler: spr_profile_id (shared spray profile), spr_spray_override (per-head FDS keys, e.g. {"particles_per_second":10000,"part":{"age":600}}; replaces the overrides — prefer spr_set_head_spray), spr_temp, spr_rti, k_factor (L/(min·bar^½)), operating_pressure (bar), flow_rate (L/min), spray_angle, particle_diameter (µm), spr_activation_time, spr_orientation (upright still 0,0,-1); HVAC: hvac_direction, volume_flow_rate, temperature, velocity, fan_curve, face_surfs, ramp_up_time. Read current values first with get_object_properties.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesObstacle ID
hrrpuaNokW/m²
surf_idsNo
fds_overrideNofds_override fields to merge (any of the documented keys).
is_fire_sourceNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (idempotent, non-destructive, non-readonly), the description discloses key semantics: fds_override fields are MERGED, whereas spr_spray_override REPLACES prior overrides. That merge-vs-replace distinction is exactly the kind of behavior an agent would otherwise get wrong.

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?

Well front-loaded: verb+resource, then merge semantics, then the override catalog grouped by device type. The key list is long but each entry earns its place for an open-ended object schema; it is dense rather than padded.

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?

For a flexible, nested, no-output-schema mutation tool, this covers the essentials: what mutates, how it merges, a pointer to read-first and an alternative tool. The only minor gap is no statement of return/confirmation behavior, which the absence of an output schema makes forgivable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 60% schema coverage and an opaque free-form fds_override object (additionalProperties: true), the description does the heavy lifting: it enumerates valid keys per device category and supplies units for otherwise cryptic fields (k_factor L/(min·bar^½), operating_pressure bar, flow_rate L/min, particle_diameter µm) plus a nested-value example.

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: 'Update an obstacle's Runtime FDS Properties,' and clarifies it writes runtime FDS state (fds_override, is_fire_source/hrrpua/surf_ids). It stops short of explicitly differentiating itself from siblings like update_obstacle or shape_set_item_fds_props, but the scope is unmistakable.

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?

Gives real usage direction: 'Read current values first with get_object_properties' establishes a prerequisite read step, and it routes the sprinkler spray case to an alternative ('prefer spr_set_head_spray'). It does not explain when to choose this over update_obstacle, but the operative context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_meshSet meshA
Idempotent

Set the computational mesh resolution and domain extents (a single &MESH). ⚠ Resets any multi-mesh deck to a single mesh. Use set_meshes / auto_multimesh to keep or build a multi-mesh deck. [bulc-mcp] Resets a multi-mesh deck to a single mesh (MESH-004). [bulc-mcp rules] MESH-001, MESH-005, GEO-006 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
niYesNumber of cells in X direction
njYesNumber of cells in Y direction
nkYesNumber of cells in Z direction
xbNoDomain [x_min,x_max,y_min,y_max,z_min,z_max]

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond the annotations: it discloses that the call collapses any multi-mesh deck to a single mesh, which the idempotentHint/destructiveHint flags do not convey. There is mild tension with destructiveHint=false since a reset removes the existing multi-mesh configuration, but the primary operation is a non-deleting 'set', so this reads as a helpful scope warning rather than a hard contradiction.

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 core purpose and the ⚠ warning are front-loaded and efficient. The trailing [bulc-mcp] rule-ID references are useful pointers but slightly cryptic; overall tight and well-ordered.

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?

All four parameters are documented (by the schema), no output schema is needed, and the key multi-mesh gotcha and rule lookups are surfaced. An agent has enough to call it correctly; only return-value behavior is left implicit.

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 100%, so ni/nj/nk/xb are fully documented in the schema itself. The description restates 'resolution and domain extents' but adds no syntax or format meaning beyond what the schema already provides, matching the baseline 3 for high-coverage schemas.

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 and resource with scope: 'Set the computational mesh resolution and domain extents (a single &MESH).' It distinguishes itself from the sibling multi-mesh tools (set_meshes, auto_multimesh) explicitly, so an agent can pick it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternatives (set_meshes / auto_multimesh) and the condition that selects them ('to keep or build a multi-mesh deck'), plus an explicit warning about when not to use it. This is textbook when-to-use / when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_mesh_cell_sizeSet mesh cell sizeA
Idempotent

Set a uniform cell size (m); NI/NJ/NK are computed from the current domain extents. ⚠ Resets any multi-mesh deck to a single mesh. Use set_meshes / auto_multimesh to keep or build a multi-mesh deck. [bulc-mcp] Resets a multi-mesh deck to a single mesh (MESH-004). [bulc-mcp rules] MESH-001, MESH-005, MESH-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
cell_sizeYesTarget cell size (m), e.g. 0.1

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation/idempotent profile (readOnlyHint=false, idempotentHint=true), yet the description still adds real behavioral context: NI/NJ/NK are derived, the deck is collapsed to a single mesh, and rule IDs (MESH-001/002/004/005) point to deeper docs. The ⚠ 'Resets any multi-mesh deck to a single mesh' is stronger language than destructiveHint=false implies, though it is defensive setting-overwrite semantics rather than irreversible deletion.

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?

The critical warning is front-loaded well, but the '[bulc-mcp]' line restates 'Resets a multi-mesh deck to a single mesh (MESH-004)' almost verbatim, which is redundant. The trailing rule-ID / knowledge-search pointer is useful but reads like machine-generated clutter rather than prose.

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?

No output schema, but with one fully documented parameter the description covers purpose, side effect, alternatives, and rule references, so an agent has what it needs. Only the missing contrast with the singular 'set_mesh' keeps it from being fully complete.

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?

Only one parameter with 100% schema description coverage, so the schema already carries the load ('Target cell size (m), e.g. 0.1'). The description adds context about what the value drives (NI/NJ/NK from domain extents) but no units, ranges, or syntax beyond the schema, matching the baseline 3.

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 ('Set a uniform cell size (m)') and adds mechanism ('NI/NJ/NK are computed from the current domain extents'), so the agent knows exactly what changes. It distinguishes itself from the multi-mesh siblings by name, though it never contrasts itself with the singular 'set_mesh' also present in the sibling list.

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?

Explicitly routes the agent away: 'Use set_meshes / auto_multimesh to keep or build a multi-mesh deck,' which is a concrete when-not plus named alternatives. There is no comparable explicit statement of when this tool is the preferred choice beyond the implied 'you want a uniform cell size.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_meshesSet meshesA
DestructiveIdempotent

Replace the whole &MESH deck with an explicit list of meshes (multi-mesh). Passing a single mesh reverts the project to single-mesh mode. config.mesh (the union bounding box) and the OPEN-boundary vents are kept consistent by the app. Engine constraints (engine multimesh ratio_union_grid): (1) every mesh must use CUBIC cells whose size is the finest cell x 2^k (k in 1,2,4,8,16); (2) every mesh boundary and the union extent must land on a fine-grid index that is a multiple of the LARGEST ratio actually used; (3) meshes must tile the domain with no overlap and no gap; (4) a 1:4 or larger ratio makes the engine print an experimental-feature warning and switches it to per-mesh storage (MM2) plus the composite block-CG v2 pressure solve, both automatically. Verify with list_meshes; for shape-driven placement prefer auto_multimesh. [bulc-mcp rules] MESH-001, MESH-005, MESH-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
meshesYesMeshes that together tile the domain, in order.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description goes well beyond that, disclosing side effects (config.mesh union bbox and OPEN-boundary vents kept consistent), four engine constraints, and the automatic switch to MM2 storage plus composite block-CG v2 pressure solve at ratios >=1:4. It stops short of stating permissions or failure/rollback behavior, so a 4 rather than 5.

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 action and mode switch before caveats; the numbered engine constraints are dense but each earns its place given the complexity. Slightly long with the trailing rule-tag references, keeping it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, destructive mesh-replacement operation with no output schema, the description covers constraints, side effects, engine behavior, and a verification path (list_meshes). Nothing an agent needs to call it correctly is missing.

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 100%, so baseline is 3, but the description adds real semantic constraints on how the mesh list must be built: CUBIC cells at finest-cell x 2^k, boundaries on fine-grid indices, and no-overlap/no-gap tiling, plus ordering. These materially guide parameter construction beyond the schema's field-level descriptions.

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+resource ('Replace the whole &MESH deck with an explicit list of meshes') and immediately clarifies the single-mesh mode switch. An agent can distinguish it from siblings like set_mesh, merge_meshes, slice_mesh, and auto_multimesh without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names two downstream/alternative tools and the conditions selecting them: 'Verify with list_meshes; for shape-driven placement prefer auto_multimesh.' This tells the agent both when to use this tool and when to route elsewhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_numericsSet numericsA
Idempotent

Set numerical stability controls (time step and advection scheme). Use this when a run diverges, produces NaN, or when matching CPU FDS settings. dt/lock_time_step map to &TIME; the rest to &MISC. Omitted fields keep the FDS default for the current SIMULATION_MODE. particle_global sets the particle/spray-wide keys (&MISC POROUS_FLOOR, PARTICLE_CFL(_MAX/_MIN), CNF_CUTOFF, NEAR_WALL_PARTICLE_INTERPOLATION; &DUMP MAXIMUM_PARTICLES, DT_PART); particle_global_unset returns keys to the FDS default. [bulc-mcp rules] GEN-016, SIM-002, SIM-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
dtNoInitial time step [s]. Omit to let the solver derive it from CFL_MAX*min(dx)/sqrt(g*H).
vn_maxNoVon Neumann (diffusion) stability limit. VLES 1.0 / LES 0.8 / DNS 0.5.
cfl_maxNoCFL upper bound (FDS VLES default 1.0). Lower it (e.g. 0.5) to stabilise.
cfl_minNoCFL lower bound (default 0.8) — below this the solver grows dt.
c_deardorffNoDeardorff SGS constant (FDS default 0.1).
flux_limiterNoScalar advection limiter. VLES default SUPERBEE, LES/DNS default CHARM. The GPU engine implements CHARM; only MP5 is unsupported and falls back to CHARM with a warning.
lock_time_stepNoFreeze dt (disable CFL adaptation). Requires dt. Standard remedy for a diverging case.
particle_globalNoParticle-wide FDS settings for all nozzles (&MISC POROUS_FLOOR / PARTICLE_CFL… , &DUMP MAXIMUM_PARTICLES / DT_PART).
particle_global_unsetNoparticle_global keys to remove (FDS default)

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 (readOnly=false, idempotent=true, destructive=false) by disclosing that omitted fields keep the FDS default for the current SIMULATION_MODE, that particle_global_unset restores keys to FDS defaults, that MP5 is unsupported and silently falls back to CHARM with a warning, and that lock_time_step requires dt. These are real behavioral traits an agent cannot infer from structured fields.

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 purpose and the when-to-use trigger before the denser namelist bookkeeping. The particle_global sentence is long and enumerates many keys, but each clause carries distinct information; the trailing bulc rule-IDs line is useful routing rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, mostly-optional mutation tool with a nested object and no output schema, the description covers the essential gaps: default inheritance for omitted fields, the dt requirement for lock_time_step, unset semantics, and engine-specific fallbacks. An agent has enough to call it correctly without further documentation.

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 coverage is 100%, so the schema already documents each parameter; the baseline is 3. The description adds cross-cutting semantics the schema lacks: the &TIME/&MISC namelist mapping, the omit-keeps-default rule scoped to SIMULATION_MODE, and the grouping of particle_global keys versus particle_global_unset.

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 with scope: "Set numerical stability controls (time step and advection scheme)", and clarifies which namelists (dt/lock_time_step to &TIME, the rest to &MISC) it touches. It does not explicitly distinguish itself from nearby siblings such as set_time or set_run_options, which an agent could plausibly confuse with a numerics tool.

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?

"Use this when a run diverges, produces NaN, or when matching CPU FDS settings" gives concrete triggering conditions, and lock_time_step is labeled the "standard remedy for a diverging case." No alternative tool is named (e.g. get_numerics as the read counterpart, or set_time for simulation time), so routing is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_open_boundarySet open boundaryB
Idempotent

Set a domain face as OPEN (or close it). Face: XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX. [bulc-mcp rules] EVAC-002, VENT-002, VENT-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
faceYesDomain face
openYestrue = OPEN, false = close

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=false. The description adds no behavioral context beyond the schema, such as effects on existing boundary settings, synchronization needs, or what the cryptic EVAC/VENT rule references mean.

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 first sentence is concise and front-loaded with the core action. The bracket rule-reference line is cryptic and may not earn its place, but the overall description remains short.

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?

For a simple two-parameter tool with full schema description coverage and annotations covering safety and idempotency, the description is mostly complete. The lack of explicit sibling differentiation is a minor gap, but no output schema or nested objects require further explanation.

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 100%, so the enum values and boolean open/close semantics are already documented. The description only restates this information and adds no extra parameter meaning, making the baseline score appropriate.

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 (Set) and resource (domain face) with the possible states OPEN/close, so the basic action is clear. However, it does not explicitly distinguish itself from sibling tools such as set_all_boundaries_open or set_chid, leaving the single-face scope implied.

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?

No guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The cryptic rule-reference line does not explain usage and reads as metadata rather than actionable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_plot3d_outputsSet plot3d outputsB
Idempotent

Set the Plot3D output quantities and species IDs (NUM dialog). Provide up to 5 quantities. [bulc-mcp rules] ASET-004, EVAC-008, OUT-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idsNoSpecies IDs for VOLUME FRACTION quantities
quantitiesNoe.g. ["TEMPERATURE","U-VELOCITY",...]

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety/mutation profile is covered structurally. The description adds only the 5-quantity cap; it does not say whether existing outputs are replaced or appended, which is the key behavioral question for this tool.

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?

Two short sentences, front-loaded with the core action and the key constraint. The appended '[bulc-mcp rules] ASET-004, EVAC-008, OUT-003' block is cryptic pointer noise but does not bloat the text significantly.

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?

For a 2-parameter mutation tool with no output schema, the definition covers what to supply but omits replace-vs-append semantics and any indication of the resulting state. Annotations cover the safety profile and the schema covers parameter shape, so the gap is moderate rather than critical.

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 100%, so both arrays are documented ('Species IDs for VOLUME FRACTION quantities', 'e.g. ["TEMPERATURE","U-VELOCITY",...]'). The description's only added meaning is the maximum of 5 quantities; otherwise it defers to the schema, which is the expected baseline.

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 ('Set the Plot3D output quantities and species IDs') and anchors it to a known dialog context ('NUM dialog'). No sibling tool covers Plot3D output selection, so the purpose is distinguishable, though it doesn't explicitly contrast with adjacent output tools like update_dump_config or set_numerics.

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 only actionable guidance is the 'up to 5 quantities' limit. There is no statement of when to use this versus other output/config tools, no prerequisites, and no exclusions. The bulc rule IDs hint that constraints exist but never say what they are.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_run_optionsSet run optionsA
Idempotent

Set simulation RUN options (RUN dialog): solver type (gpu / gpu_cutcell = octree cut-cell engine (beta), runs on the grid from the Mesh dialog cut-cell tab / cpu_openmp), CPU thread count, FDS output path. [bulc-mcp] Writes files on this PC at the path you give. [bulc-mcp rules] GEN-016, SIM-002, SIM-009 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
cpu_threadsNo
solver_typeNo
fds_output_pathNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose mutation (readOnlyHint=false), idempotency, and closed-world scope. The description adds genuine behavior beyond that: it explicitly warns 'Writes files on this PC at the path you give,' a filesystem side effect the annotations do not capture, plus references to governing rules (GEN-016, SIM-002, SIM-009) retrievable via bulc_knowledge_search.

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?

The core purpose is front-loaded and useful, but the description is dense with parentheticals and a nested cut-cell explanation that crowds the sentence. The bulc rule-ID block is boilerplate that consumes space without helping invocation.

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?

For a mutation tool with annotations covering its safety profile and no output schema, the description covers all three parameters, the file-write side effect, and the governing-rule path. Its main gap is workflow context — how this pairs with mesh cut-cell setup and simulation start.

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 load, and it does: it explains solver_type's enum values with meaningful distinctions (gpu vs gpu_cutcell octree cut-cell engine beta bound to the Mesh cut-cell tab, vs cpu_openmp), plus what cpu_threads and fds_output_path control. Meaningful compensation for a bare schema.

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 (set simulation RUN options) and enumerates the three settings it controls (solver type, CPU thread count, FDS output path), which maps to the RUN dialog. It's clearly distinguishable from sibling settings tools like set_mesh, set_numerics, and set_time, though it never explicitly names those siblings as 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?

The description says what can be configured but never when to call it versus alternatives such as set_simulation_mode, set_numerics, or before sim_start/run_simulation. The rule-ID references imply a governed step but give no selection guidance, so an agent must infer the workflow position.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_simulation_modeSet simulation modeC
Idempotent

Set simulation mode: LES, VLES, SVLES, or DNS [bulc-mcp rules] GEN-016, SIM-002, SIM-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesSimulation mode

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond the enum: it does not say what changing the mode affects, whether it must precede meshing, or any persistence/validation behavior, leaving a genuine gap for a mutating setter.

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?

Very short and front-loaded, with the operation stated first. The enum repetition and the log-style rules reference are the only mild noise; overall it is efficient.

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?

For a trivial single-enum setter with full schema coverage and clear annotations, no output schema is needed and the definition is minimally viable. It is nonetheless thin on what the setting influences, which an agent would want when wiring LES/VLES/DNS into a simulation setup.

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 100% and the single parameter is a fully enumerated 'mode' field, so the schema does the documentation work. The description only echoes the same enum values and adds no extra meaning such as which mode is appropriate for which scenario, which is the baseline-3 outcome.

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 ("Set simulation mode") and enumerates the valid modes, so an agent knows exactly what the tool does. It does not, however, distinguish itself from related siblings like set_turbulence_model or set_numerics, and the enum list merely repeats the schema.

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 alternatives, nor any prerequisites (e.g., whether the project must be open or the mesh already built). The bracketed bulc-mcp rules line points at bulc_knowledge_search for rule IDs, which is a cryptic cross-reference rather than actionable usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_timeSet timeC
Idempotent

Set the simulation end time. [bulc-mcp rules] GEN-016, SIM-002, FIRE-005 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
t_endYesSimulation end time (seconds)
t_beginNoSimulation start time (seconds, default 0)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the safety picture is covered. The description adds nothing behavioral beyond that, and the cryptic rules line conveys no operational context such as what existing time settings are overwritten or whether the change requires a re-run.

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 core sentence is front-loaded and wastes no words. The trailing rules reference is opaque but very short, so it does not bloat the definition.

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?

For a simple 2-parameter tool with 100% schema coverage and annotations carrying the safety profile, the description is adequate but thin. Given the many confusingly similar time/result siblings, it should say more about scope (simulation setup vs. result playback) to be complete.

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 coverage is 100%, so t_end and t_begin are already fully documented in the schema. The description only restates the 'end time' concept and adds no extra meaning (no units, ordering constraints, or interaction between t_begin and t_end beyond what the schema provides), so baseline 3 applies.

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 verb+resource ('Set the simulation end time'), which is unambiguous on its own. It does not, however, differentiate this from closely named siblings like result_set_time (playback time) or set_run_options, so an agent must infer the distinction.

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, when not to, or which alternatives exist. The bracketed rules reference ('GEN-016, SIM-002, FIRE-005') points to a knowledge-search convention but gives no actionable selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_turbulence_modelSet turbulence modelB
Idempotent

Set the turbulence model. Options: DEARDORFF (default), VREMAN, WALE, CONSTANT_SMAGORINSKY. [bulc-mcp rules] GEN-016, SIM-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesTurbulence model name

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety/idempotency profile is covered. The description adds one genuinely useful behavioral fact — that DEARDORFF is the default — but says nothing about whether the change takes effect on the current setup or requires re-running preflight/the simulation.

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?

The first two sentences are tight and front-loaded with the essential information. The trailing bracketed rule-reference is opaque filler that consumes attention without conveying usable instruction.

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?

For a one-parameter enum setter with annotations and no output schema, the description covers the minimum: what it sets, valid values, and the default. It omits the practical consequence of the change (restart requirement, interaction with set_numerics/mesh settings), which is the main thing an agent would want before invoking it.

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 100% and the single parameter is a self-describing enum, so the schema does the heavy lifting. The description duplicates the enum list and adds only the 'DEARDORFF (default)' annotation, which is the one value beyond the schema's content.

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 ('Set the turbulence model') and enumerates the accepted values, so the agent knows exactly what configuration is being changed. It does not, however, distinguish itself from adjacent simulation-configuration siblings such as set_numerics or set_simulation_mode.

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 guidance on when a given model should be chosen (e.g., which LES model suits which flow regime) or when not to change the default. The cryptic '[bulc-mcp rules] GEN-016, SIM-002 — bulc_knowledge_search "<id>"' line hints at looking up rules but gives no actionable when-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_add_archShape add archA

Shape Studio: add an ARCHED / VAULTED / SEMICIRCULAR ceiling (barrel vault, dome-roof tunnel) in ONE call — a curved shell whose inner surface is a circular arc of clear width span and inner height rise above the springing line (rise = span/2 → semicircle; smaller → shallow segmental arch), extruded length metres along axis. Use this whenever the user asks for a round/arched/curved/semicircular ceiling or tunnel roof instead of composing primitives. Placement: start = coordinate along the axis where the arch begins, center = transverse coordinate of the arch centre line, z_base = height of the springing line (0 = arch rises from the floor; for a room use the wall-top height). Afterwards export it with shape_export_geom (exact curved &GEOM for the cut-cell solver) or shape_export_obst (voxelised). Units: metres.

ParametersJSON Schema
NameRequiredDescriptionDefault
axisYesExtrusion (tunnel) axis
nameNo
riseNoInner arch height above the springing line (m). Default span/2 (semicircle).
spanYesInner clear width (m), e.g. tunnel width
colorNo
startNoAxis coordinate where the arch begins (m). Default 0
centerNoTransverse coordinate of the arch centre line (m). Default 0
lengthYesExtrusion length along the axis (m)
z_baseNoSpringing-line height (m). Default 0
surf_idNo
segmentsNoArc facets (default 48)
thicknessNoShell thickness (m). Default 0.3

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-readOnly, non-destructive, non-idempotent creation operation, so the safety bar is largely covered. The description adds genuinely useful behavior beyond that: units are metric, rise defaults to span/2, defaults exist for start/center/z_base, and the shape must subsequently be exported via shape_export_geom or shape_export_obst. It doesn't address what happens on duplicate/repeated calls, which the non-idempotent hint implies.

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?

Long but dense and front-loaded: the identity of the shape comes first, then the geometry math, then placement, then the required follow-up export, then units. Each clause carries information, though the parenthetical synonyms (arched/vaulted/semicircular, barrel vault, dome-roof tunnel) are slightly redundant.

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?

For a 12-parameter creation tool with no output schema, the description supplies the geometric model, defaults, units, placement semantics and the mandatory next-step export call. The main residual gaps are the remaining cosmetic/identity parameters (name, color, surf_id) and any mention of resulting object identity, which is minor.

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?

With 75% schema coverage the baseline is 3, but the description adds real geometric meaning beyond the schema: rise = span/2 → semicircle, smaller → segmental arch; z_base = springing line (0 = floor, wall-top for a room); start/center defined as axis and transverse coordinates. It leaves name, color and surf_id unexplained, but those are self-explanatory or schema-covered.

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 (add) plus a precisely defined resource: an arched/vaulted/semicircular ceiling shell with span, rise, length and axis. It distinguishes itself from the sibling primitive-composition route ('instead of composing primitives') and from the export siblings it hands off to, so an agent can select it without opening a schema.

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?

Gives an explicit trigger condition ('use this whenever the user asks for a round/arched/curved/semicircular ceiling or tunnel roof') and names the alternative approach (composing primitives). It does not spell out when-not to use it (e.g. vs shape_add_cylinder for a solid curved mass), so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_add_boxShape add boxA

Shape Studio: add a box. Origin = bottom-face center, z-up, metres. Optional at=[x,y,z] placement and rotate_deg=[rx,ry,rz].

ParametersJSON Schema
NameRequiredDescriptionDefault
dYesDepth (y, m)
hYesHeight (z, m)
wYesWidth (x, m)
atNo
nameNo
colorNoViewport hex color
surf_idNoFDS SURF to assign on export
rotate_degNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write profile (readOnly=false, idempotent=false, destructive=false, closed world). The description adds real behavioral context beyond that: the origin is the bottom-face center, the axis convention is z-up, and units are metres — all of which affect where the geometry lands. It does not explain how name/color/surf_id affect the result, so not a 5.

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 compact sentences, front-loaded with the action and immediately followed by the conventions an agent needs before calling. No filler.

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?

For an 8-param creation tool with no output schema, the description covers the geometric conventions that most affect correctness. It leaves defaults (color, name) and the surf_id-on-export behavior unaddressed, but annotations carry the mutability profile so nothing critical is missing.

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 coverage is 63%, and the two structurally undocumented params (at, rotate_deg) are the ones the description explains with concrete formats: at=[x,y,z] and rotate_deg=[rx,ry,rz]. Units (metres) are also supplied here. It adds genuine value over the schema, though it says nothing about name.

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 (add) and resource (a box) in the named Shape Studio context, so an agent can separate it from shape_add_cylinder/sphere/wedge by the resource alone. It stops short of explicit sibling differentiation (e.g., vs. shape_add_polygon_prism or shape_extrude_sketch) but the verb+resource pairing 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?

No when-to-use or when-not-to-use guidance, and no prerequisites (e.g., that a document must exist, cf. shape_new_document / project_new are siblings). The description only says what it adds, not when it is the right choice among the many shape_add_* alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_add_coneShape add coneB

Shape Studio: add a cone/frustum (r1=bottom radius, r2=top radius, axis z, m).

ParametersJSON Schema
NameRequiredDescriptionDefault
hYes
atNo
r1Yes
r2Yes
nameNo
colorNo
surf_idNo
segmentsNo
rotate_degNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare that this is a mutation (readOnlyHint=false) that is non-destructive and non-idempotent. The description adds useful context beyond annotations: it identifies the tool as part of Shape Studio, specifies the axis ('z'), and gives units ('m'). However, it does not disclose what happens to the current document, undo behavior, or how the new object is named or surfaced.

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?

A single compact sentence with zero waste. The tool's context and core purpose are front-loaded, and the parenthetical parameter clarifications are tightly integrated.

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?

Given 9 parameters, no output schema, and zero schema descriptions, the description is too thin. It omits the required height parameter and the meaning of most optional parameters, so an agent cannot reliably call the tool with correct optional settings.

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%, so the description must carry the burden for 9 parameters. It only clarifies r1 (bottom radius) and r2 (top radius), leaving h, at, name, color, surf_id, segments, and rotate_deg entirely undocumented. Partial compensation is better than nothing but far from sufficient.

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 verb ('add') and resource ('cone/frustum') and clarifies the key geometric parameters (r1, r2, axis). It is easy to distinguish from siblings like shape_add_cylinder or shape_add_sphere by resource, but it never explicitly names or contrasts an alternative.

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 guidance on when to use this tool versus alternatives such as shape_add_cylinder, shape_add_arch, or shape_add_revolve. The description is a bare command with no context about when a cone/frustum is the right shape or what prerequisites exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_add_cylinderShape add cylinderB

Shape Studio: add a cylinder (axis along z, origin = bottom center, m).

ParametersJSON Schema
NameRequiredDescriptionDefault
hYesHeight (z, m)
rYesRadius (m)
atNo
nameNo
colorNo
surf_idNo
segmentsNoCircle segments (default 32)
rotate_degNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-idempotent, non-destructive write, so the safety profile is already covered. The description usefully adds placement semantics (axis orientation, origin at bottom center, metric units) that neither annotations nor schema state, but says nothing about undo, required document state, or what happens to the new node.

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 filler; the parenthetical packs the highest-value geometry facts. It is arguably terse to the point of omitting needed guidance, but as conciseness it is efficient.

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?

For an 8-parameter mutating tool with 38% schema coverage and no output schema, the description leaves too much open: it never says which parameters are required (r, h), whether 'at' defaults to the origin, what identifiers or values color/surf_id accept, or what the tool returns on success.

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 coverage is only 38%: h, r, and segments are documented, while at, name, color, surf_id, and rotate_deg are bare. The description partially compensates by establishing the metric unit and the z-axis/bottom-center frame, which clarify at and rotate_deg, but color, surf_id, and name remain unexplained anywhere.

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?

Specific verb (add) plus resource (cylinder) with a precise geometric convention: axis along z, origin at bottom center, units in meters. That convention distinguishes it in substance from shape_add_sphere/box/cone, though the description never names those siblings to make the routing explicit.

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?

No when-to-use, no prerequisites (e.g., whether a document must exist first via shape_new_document), and no mention of alternatives such as shape_extrude_sketch or shape_add_revolve for non-primitive shapes. Usage must be inferred entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_add_polygon_prismShape add polygon prismB

Shape Studio: extrude a 2D polygon (xy plane, CCW) along z by height — like FreeCAD Sketch+Pad. points=[[x,y],...] (m).

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
nameNo
colorNo
heightYes
pointsYes
surf_idNo
rotate_degNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the mutation profile (readOnly=false, destructive=false, idempotent=false, closed world), so the bar is lower. The description adds useful geometric behavior (extrusion along +z, CCW winding requirement, meter units for points), but says nothing about units for height, how at/rotate_deg are applied, or what gets created/returned.

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?

Compact single sentence plus a short parameter note, with the core operation front-loaded before the format detail. Minimal waste, though the trailing points note is somewhat telegraphic.

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?

For a 7-parameter geometry-creation tool with no output schema and no per-parameter schema descriptions, the definition leaves the majority of parameters unexplained and omits return/result behavior. An agent cannot confidently supply at, rotate_deg, color, name, or surf_id from this description.

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%, so the description carries the full burden, yet it only documents points (format and meters) and gestures at height. The remaining five parameters (at, name, color, rotate_deg, surf_id) receive no explanation anywhere, leaving most of a 7-parameter tool semantically opaque.

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 precise verb (extrude), the resource (a 2D polygon in the xy plane), the direction (along z by height), and the required winding (CCW). The FreeCAD Sketch+Pad analogy and the explicit points=[[x,y],...] (m) format let an agent distinguish it from siblings like shape_extrude_sketch or shape_push_pull without opening the schema.

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 via the operation analogy; there is no explicit statement of when to pick this tool over shape_extrude_sketch, shape_push_pull, or shape_add_box. No prerequisites or constraints on applicability are given, leaving the selection decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_add_revolveShape add revolveB

Shape Studio: revolve a half-profile around the z axis — like FreeCAD Revolution. points=[[radius,z],...] radius>=0, top-to-bottom order. angle_deg default 360.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
nameNo
colorNo
pointsYes
surf_idNo
segmentsNo
angle_degNo
rotate_degNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine behavioral detail (revolution about the z axis, top-to-bottom profile ordering, radius constraint), but says nothing about which document/item the result is attached to or whether the operation is reversible via shape_undo.

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?

Extremely dense and front-loaded: purpose first, then the profile format and defaults. Every clause earns its place, though the terse 'points=[[radius,z],...]' notation is compressed enough to require careful parsing.

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?

For an 8-parameter shape-creation tool with no output schema and 0% schema description coverage, the description addresses purpose and one parameter but omits what document the shape is added to, the meanings of at/segments/rotate_deg/surf_id/name/color, and any return information. It is too thin for the tool's complexity.

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 coverage is 0% across 8 parameters, so the description carries the burden and it does document the most important one: points=[[radius,z],...] with radius>=0 and top-to-bottom ordering, plus the angle_deg=360 default. However, six parameters (at, name, color, surf_id, segments, rotate_deg) are left completely 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 (revolve) and resource (a half-profile around the z axis), and anchors it with the 'like FreeCAD Revolution' analogy, so an agent can distinguish it from primitive adds like shape_add_cylinder. It does not, however, explicitly contrast it with the closest sibling, shape_extrude_sketch, which is the other profile-driven shape generator.

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?

The geometry description implies the use case (building a revolved solid from a profile), but there is no explicit when-to-use versus when-not, no mention of requiring an active document, and no routing to alternative tools such as shape_extrude_sketch or shape_push_pull.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_add_sphereShape add sphereC

Shape Studio: add a sphere (origin = bottom tangent point, m).

ParametersJSON Schema
NameRequiredDescriptionDefault
rYes
atNo
nameNo
colorNo
surf_idNo
segmentsNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-idempotent, non-destructive, non-open-world write. The description usefully adds the geometric convention ('origin = bottom tangent point, m'), which is real behavior beyond the annotations. It says nothing about undo/redo interaction or what happens to the document state, so it remains modest.

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 line that is front-loaded with the action and module, with no filler. It is efficient, though the terseness borders on under-specification for a 6-parameter tool.

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?

For a 6-parameter creation tool with no output schema and minimal annotations, the description is too sparse. It omits the meaning/format of color, surf_id, segments, name, and the required radius, and gives no success/return expectations.

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% across 6 parameters, so the description must compensate. It only partially clarifies 'at' (as the bottom tangent origin) and implies units in meters; r, name, color, surf_id, and segments are entirely undocumented. Coverage of parameter meaning is far too thin for the parameter set.

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 ('add a sphere') in a named module, clearly distinct from sibling shape_add_box/cylinder/cone/torus. It also adds the origin convention, which further pins down what is being created. However it does not contrast with related siblings like shape_add_torus or shape_add_arch beyond the resource name.

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?

No guidance on when to use this versus alternatives such as shape_add_cone, shape_add_cylinder, or boolean/revolve operations. The agent is left to infer selection purely from the resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_add_torusShape add torusC

Shape Studio: add a torus lying in the xy plane (r=ring radius, tube=tube radius, m).

ParametersJSON Schema
NameRequiredDescriptionDefault
rYes
atNo
nameNo
tubeYes
colorNo
surf_idNo
segmentsNo
rotate_degNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-idempotent, non-destructive write, so the mutating nature is covered structurally. The description adds the orientation constraint (torus lies in the xy plane), which is genuinely useful geometry context, but says nothing about undo behavior, return format, or why idempotency is false. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence, front-loaded with context and resource. No wasted words, though the ambiguous 'm' token slightly muddies an otherwise efficient line.

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?

For an 8-parameter write tool with 0% schema coverage and no output schema, the description is too thin: it never explains positioning, color, naming, surface binding, or segmentation, and gives no return expectations. Sibling add-shape tools suggest a shared convention the description never surfaces.

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%, so the description carries the full burden, yet it only glosses two of eight parameters ('r=ring radius, tube=tube radius'). The trailing 'm' is cryptic and likely a unit hint, and 'at', 'rotate_deg', 'name', 'color', 'surf_id', and 'segments' are completely undocumented in both description and schema.

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 verb and resource ('add a torus') and adds geometry detail beyond the name ('lying in the xy plane'). It is clearly distinguishable from sibling add-shapes (box, cylinder, sphere, cone) by the resource itself, but it never explicitly differentiates when a torus is the right choice versus those siblings, so it stops short of 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 when-to-use, when-not-to-use, or alternative routing. The 'Shape Studio:' prefix implies a modeling context but nothing tells the agent how this differs from shape_add_sphere or shape_add_cylinder. Usage must be fully inferred from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_add_wedgeShape add wedgeB

Shape Studio: add a right-angle wedge (ramp). Base w×d, height h; slope descends along +x. (m)

ParametersJSON Schema
NameRequiredDescriptionDefault
dYes
hYes
wYes
atNo
nameNo
colorNo
surf_idNo
rotate_degNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the description is not carrying that burden. It does add genuinely useful behavior the annotations lack: the slope orientation along +x and the unit '(m)' for the geometry. It omits default placement, whether geometry is added to the current document or a new one, and any precondition on an open document.

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 dense sentence with the tool context front-loaded and zero waste; 'Base w×d, height h' is compact but decodable against the schema's w/d/h names. The abbreviation style is terse rather than padded, though it edges toward under-specification.

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?

For an 8-parameter creation tool with no output schema and no schema descriptions, the core geometry and units are covered adequately and annotations handle the safety profile. Missing are the semantics of at/rotate_deg placement and surf_id assignment, which an agent needs to invoke the tool beyond its defaults.

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?

With 0% schema description coverage, the description must compensate, and it does so for the three required params by mapping 'Base w×d, height h' and supplying the metre unit. However, five optional params (at, name, color, surf_id, rotate_deg) have no meaning anywhere, so the compensation is only partial.

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 ('add') and resource ('right-angle wedge (ramp)'), and adds distinguishing geometry: base w×d, height h, slope descending along +x. This separates it from the other shape_add_* primitives (box, cone, sphere, torus) without opening a schema. It stops short of naming an explicit alternative or scope condition, so it lands at 4 rather than 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 when-to-use guidance, no statement of prerequisites (e.g., whether a Shape Studio document must already exist, as shape_new_document implies), and no routing to alternatives such as shape_extrude_sketch, shape_push_pull, or add_ramp. The 'Shape Studio:' prefix hints at context but gives the agent nothing actionable about selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_arrayShape arrayB

Shape Studio: repeat a node. linear: step=[dx,dy,dz] per copy. polar: rotate copies around a z-parallel axis at axis_point=[x,y], total angle_deg (default 360).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYes
nameNo
stepNo
countYes
inputYes
angle_degNo
axis_pointNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (not read-only, non-destructive, not idempotent), so the bar is lower. The description adds the geometry semantics of what happens to each copy, but says nothing about the resulting document/node-tree effects (are copies new nodes, is the source retained, naming).

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 tool's identity, then mode-conditional details in a compact colon-delimited form; no sentence is wasted. It is close to over-terse in places ('step=[dx,dy,dz] per copy'), but structure serves the reader well.

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?

For a 7-parameter tool with zero schema description coverage and no output schema, the description should at minimum cover the required inputs. It explains the geometry transforms but omits input, count, and name entirely, so an agent cannot fully drive the tool from the definition alone.

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, and it does give real value for four of seven params: step format [dx,dy,dz], axis_point as [x,y], the 360 default for angle_deg, and the two mode values. However, two required parameters (input and count) are documented nowhere, leaving a meaningful 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 the operation precisely ('repeat a node') and the two pattern types (linear, polar) it produces, so an agent understands it is an array/patterning tool rather than a one-off add. It does not explicitly distinguish itself from nearby siblings like shape_mirror or shape_transform, which keeps it out of 5 territory.

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 through the mode descriptions: pick linear when you want offset copies, polar when you want rotational copies. There is no explicit when-to-use statement and no routing to alternatives such as shape_mirror or shape_transform, so the agent must infer tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_booleanShape booleanB

Shape Studio: boolean of nodes. union=merge all; subtract=first minus rest; intersect=common volume. Input nodes are consumed into the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
nameNo
colorNo
inputsYesNode ids
surf_idNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, non-idempotent, non-destructive behavior, so the bar is lower. The description adds a genuinely important, non-obvious trait beyond them: 'Input nodes are consumed into the result', telling the agent the original nodes no longer exist standalone after the call. It still says nothing about failure modes (non-manifold or non-solid inputs) or permission requirements, so it is not a full 5.

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?

Three short, dense sentences with zero filler; the operation list is front-loaded right after the one-line purpose. The telegraphic style ('boolean of nodes') is slightly terse but nothing is wasted or buried.

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?

With no output schema and a five-parameter mutation tool, the description should say what comes back (a new node id/handle?) and how the consumed inputs are referenced afterwards. It covers the operation semantics and input consumption well but leaves the return contract and error conditions implicit.

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 only 20% and five parameters exist, so the description carries real weight here. It does explain op semantics (union/subtract/intersect) and the fate of inputs, but leaves name, color and especially surf_id entirely undefined in both schema and prose. Adequate but incomplete compensation 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?

States a specific verb+resource ('boolean of nodes') and then defines exactly what each operation mode does, so an agent knows this is a CSG combine, not a primitive-creation tool. It does not explicitly distinguish itself from the nearest related sibling (shape_hull, shape_mirror), which keeps it just short of 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?

No when-to-use guidance, no prerequisites (e.g. that inputs must be closed solids), and no exclusions or mentions of alternatives such as shape_hull or shape_array. The only routing information is implicit in the op semantics, so the agent must infer everything about applicability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_delete_nodeShape delete nodeB
Destructive

Shape Studio: delete a node. with_inputs (default true) also deletes its consumed input subtree.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
with_inputsNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is known. The description adds real value beyond that by disclosing the cascade effect: with_inputs (default true) also removes the consumed input subtree, which is the kind of destruction detail the annotations cannot convey.

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?

Two compact sentences with the destructive action front-loaded and the cascade caveat immediately after. Every phrase carries information; only minor awkwardness in '(default true) also deletes its consumed input subtree' slightly clouds the reading.

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?

For a destructive two-parameter tool with no output schema, the description covers the key cascade behavior and leans on annotations for safety. It omits any mention of recoverability (e.g., undo) and does not clarify the id's referent, leaving a moderate gap.

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% for both parameters, so the description must compensate. It explains with_inputs clearly, including its default and cascade semantics, but leaves the required 'id' parameter entirely unexplained beyond its name, so it only half-covers the gaps.

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 (delete) and resource (a node) within the named Shape Studio context, and the destructive intent is unambiguous. It distinguishes itself from the edit/add siblings by the verb alone, though it does not explicitly name a sibling it is not.

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 explicit when-to-use or when-not guidance, and no mention of alternatives such as shape_undo or shape_edit_node. The only usage-related signal is the with_inputs default, which is parameter behavior rather than routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_edit_nodeShape edit nodeA

Shape Studio: rename / show-hide / assign FDS SURF / set color / mark fire faces + fire properties of a node. fire_faces: 6 booleans in FDS SURF_ID6 order [-X,+X,-Y,+Y,-Z,+Z] OR face-name strings like ["-Z"] ("bottom"/"top" aliases ok); [] clears. Fire faces render as red hatching in the viewport and are wired to a FIRE SURF (+ RAMP_Q / &REAC) on shape_export_obst. Fire properties (merged individually, unspecified keys keep their previous value): fire_hrrpua, fire_tmp_front (°C), fire_ramp_points ([[t_seconds, fraction_0..1], ...] HRR time curve), fire_fuel_type, fire_soot_yield, fire_co_yield, fire_radiative_fraction, fire_ext_coeff. ONE FIRE OBST PER DOCUMENT: fire faces may exist on only one shape — assigning them to another node automatically clears the previous node's fire faces. PLAN FIRST: real FDS can only apply a fire SURF to a FLAT face (never a curved or stepped one), so setting fire_faces without plan_confirmed changes nothing (the fire_* properties in the same call are dropped too) and returns a 6-direction flatness analysis instead — discuss it with the user, agree on which flat face, HRRPUA, RAMP and combustion properties, then call again with plan_confirmed=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
colorNo
surf_idNo
visibleNo
fire_facesNo[-X,+X,-Y,+Y,-Z,+Z] booleans or face names, [] to clear. Only ONE node per document may have fire faces (others are cleared automatically)
fire_hrrpuaNoFire face HRRPUA kW/m² (default 1000 at export)
fire_co_yieldNo&REAC CO_YIELD
fire_ext_coeffNoSURF E_COEFFICIENT (extinction coefficient)
fire_fuel_typeNoFuel PRESET id — WOOD_OAK, POLYURETHANE_FOAM, COTTON, NYLON, POLYPROPYLENE, PVC, PMMA, GASOLINE. Prefer a preset id: export then writes &REAC FUEL plus the matching C/H/O/N, soot/CO yield and radiative fraction. Any other string is passed through as a raw FUEL name with no chemistry.
fire_tmp_frontNoSURF TMP_FRONT — ignition surface temperature (°C)
plan_confirmedNoSet true only AFTER the user agreed on the flat fire face and the fire properties (required to actually apply fire_faces and the fire_* properties sent with it)
fire_soot_yieldNo&REAC SOOT_YIELD
fire_ramp_pointsNoHRR time curve for RAMP_Q: [[t_seconds, fraction_0..1], ...]
fire_radiative_fractionNo&REAC RADIATIVE_FRACTION (default 0.35)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnly=false, destructive=false, idempotent=false, openWorld=false; the description goes far beyond that by disclosing the document-level singleton constraint (assigning fire faces to another node silently clears the previous node's), the viewport rendering of fire faces (red hatching), the downstream wiring to a FIRE SURF + RAMP_Q/&REAC on shape_export_obst, and the no-op/queries-instead behavior when plan_confirmed is absent. The per-key merge semantics ('unspecified keys keep their previous value') are also behavior the annotations cannot express.

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?

It is long and formatted as one dense block, but it is front-loaded with the operation list and then uses caps-labelled clauses ('ONE FIRE OBST PER DOCUMENT', 'PLAN FIRST') to make the critical rules scannable. Some of the fire_* bullet text restates schema descriptions, which is minor waste for a 15-parameter tool.

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?

For a 15-parameter, no-output-schema, domain-specific mutation tool the description covers the workflow, the singleton side effect, the flatness gating and the fire-property merge rules, which is nearly everything needed to call it correctly. It never tells the caller what a normal successful call returns or how to obtain the node id, but the plan_confirmed fallback behavior is explicitly described.

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 coverage is 67% and the five uncovered params (id, name, color, surf_id, visible) carry obvious meanings, so the baseline is not low. The description still adds real meaning beyond the schema: the exact 6-boolean ordering [-X,+X,-Y,+Y,-Z,+Z], face-name strings and 'bottom'/'top' aliases, [] to clear, °C for fire_tmp_front, the [t_seconds, fraction] shape of ramp points, and the individual-key merge rule that the schema never states.

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?

The opening sentence gives a specific verb set and resource: 'rename / show-hide / assign FDS SURF / set color / mark fire faces + fire properties of a node.' An agent can tell this is the node-level editor in the Shape Studio family (as opposed to shape_add_* creators or shape_export_* writers) without opening the schema.

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?

The 'PLAN FIRST' block gives an explicit precondition and workflow: setting fire_faces without plan_confirmed changes nothing and returns a flatness analysis, so the agent must discuss flat face/HRRPUA/RAMP with the user and re-call with plan_confirmed=true. What is missing is routing against the close sibling shape_set_params, which is never mentioned, so a caller cannot tell which of the two to prefer for plain parameter edits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_export_geomShape export geomA

Shape Studio → FDS cut-cell: export the exact CSG mesh as an &GEOM triangulated surface — no voxelization, so slopes and curves keep their true shape instead of being stair-stepped like shape_export_obst. Only a watertight surface is exported: primitives, hull, array, mirror and non-overlapping unions are fine, but an OVERLAPPING boolean (union/subtract/intersect) always leaves an open seam the CSG library cannot close, so the export is refused — voxelize those with shape_export_obst instead. Needs a GPU engine build with cut-cell support; older engines parse &GEOM but ignore it. Fire (HRRPUA) on a GEOM surface is not supported yet — use shape_export_obst for the burner. Units m, z-up. Default: every visible root, each keeping its own SURF; origin repositions the bbox min corner. [bulc-mcp rules] GEO-010 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
rgbNoDisplay colour 0-255 (default: let Smokeview use the SURF colour)
originNoDomain position of bbox min corner (default: keep authored coords)
geom_idYesNew &GEOM ID (re-exporting with the same ID replaces it)
node_idNoNode to export (default: union of visible roots, per-node SURF kept)
surf_idNoSURF for all faces (default: per-node SURF, else FDS default surface)
allow_openNoWrite the &GEOM even when the surface has holes. Not recommended: FDS stops with ERROR(730) and the GPU cut-cell solver mis-classifies inside/outside
transparencyNoDisplay opacity 0-1

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-read-only, non-destructive write, but the description substantially exceeds them: it discloses the watertight precondition, that the export is refused on overlapping booleans, the GPU cut-cell build requirement, the HRRPUA limitation, and that re-exporting with the same ID replaces. Minor note: idempotentHint=false sits slightly awkwardly with 're-exporting with the same ID replaces it', though this is a nuance not a contradiction.

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?

Purpose and the key sibling contrast are front-loaded, and the dense run-on sentences carry real information. It is on the long side for one tool, with the trailing rule-reference line and some repeated 'use shape_export_obst' phrasing that could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description fully covers what is produced (a triangulated &GEOM surface), the units (m, z-up), default scope (all visible roots), and every failure mode. Nothing needed to invoke it correctly is missing.

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 100%, so the schema already documents all 7 parameters. The description's parameter content ('every visible root, each keeping its own SURF', 'origin repositions the bbox min corner') largely restates the schema defaults, so it adds little meaning beyond what is already structured.

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+resource ('export the exact CSG mesh as an &GEOM triangulated surface') and immediately distinguishes itself from shape_export_obst by contrasting exact geometry with voxelization. An agent can identify the operation and its fidelity trade-off without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use and when-not-to-use guidance: use this for watertight surfaces, but fall back to shape_export_obst for overlapping booleans (open seam) and for burners (HRRPUA unsupported). Alternatives and the conditions selecting them are named, not implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_export_objShape export objA

Shape Studio → CFD: export the exact CSG mesh as OBJ (no voxelization). Units m, z-up. [bulc-mcp] Writes files on this PC at the path you give.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesOutput .obj absolute path
node_idNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false; the description adds genuine context beyond them by disclosing that it writes a file on the local PC, plus the mesh is exact CSG (not voxelized) with units m and z-up. It stops short of covering overwrite behavior or failure modes, but the core side effect is disclosed.

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, front-loaded with the operation and format, then the side-effect warning. Every clause carries information and nothing is padded.

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?

For an export tool with no output schema whose write/read annotations are already present, the description supplies units, orientation, exactness and filesystem impact. The only real gap is the semantics of the optional node_id and overwrite behavior, which are minor for calling it correctly.

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 coverage is 50%: 'path' is documented in the schema and reinforced by 'at the path you give', but 'node_id' is undocumented in both schema and description, leaving what it selects ambiguous (single node vs whole document). Baseline 3 given partial coverage.

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 (export) and resource (the exact CSG mesh as OBJ), and the 'no voxelization' qualifier distinguishes it from voxel-mesh exports such as shape_preview_voxels. It does not explicitly name its closest siblings (shape_export_stl, shape_export_geom, shape_export_obst), so the differentiation is implied by format rather than stated.

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?

The 'Shape Studio → CFD' framing and 'no voxelization' hint at when this export is appropriate (wanting exact geometry for downstream CFD), but it never states when to prefer it over shape_export_stl/geom/obst, nor any exclusion. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_export_obstShape export obstA

Shape Studio → FDS: voxelize the shape (node_id, or union of all visible roots) and add it to the model as an obstacle with voxel geometry. Recommended: align_to_mesh=true — voxels then use the project MESH cell size and sit exactly on FDS cell boundaries (no ±1 cell snapping). Otherwise voxel_size (m, e.g. 0.1) or per-axis cell [dx,dy,dz]. voxel_mode "shell" voxelizes only the surface (hollow meshes such as hoods, ducts, funnels, open imported STL); default "solid" fills the inside. origin optionally repositions the bbox min corner in the domain (breaks mesh alignment). [bulc-mcp rules] GEN-003, GEO-009, GEO-010 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
cellNoPer-axis voxel size [dx,dy,dz] (m) — overrides voxel_size
originNoDomain position of bbox min corner (default: keep authored coords)
node_idNoNode to export (default: union of visible roots)
surf_idNoSURF for all faces (default: node surf or INERT)
voxel_modeNosolid (default) or shell (surface only)
voxel_sizeNoVoxel edge (m), e.g. 0.1 — ignored when align_to_mesh
obstacle_idYesNew obstacle ID
align_to_meshNoUse the (finest) project MESH cell size and grid origin

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations establish a non-destructive write; the description adds real behavioral context: the voxels sit on FDS cell boundaries via align_to_mesh (no +/-1 snapping), origin repositions the bbox and 'breaks mesh alignment', and voxel_size is ignored when align_to_mesh is set. It does not mention permissions, side effects on the shape, or whether the source shape is consumed, but the alignment/snapping semantics are valuable 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?

Front-loaded purpose followed by dense, earning sentences covering alignment, size overrides, mode, and origin. Slightly cluttered by the trailing '[bulc-mcp rules]' reference, but overall efficient for an 8-parameter tool.

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?

For an 8-param, no-output-schema write tool, the description covers all the semantic decisions an agent must make (alignment, sizing, fill mode, positioning). It is complete enough to invoke correctly, with only minor gaps around side effects and source-shape handling.

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 coverage is 100%, so the baseline is 3, but the description adds precedence rules the schema does not state (cell overrides voxel_size; voxel_size ignored under align_to_mesh) and concrete examples for shell mode ('hoods, ducts, funnels, open imported STL'). It enriches the interaction between parameters rather than restating them.

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 and resource: 'voxelize the shape ... and add it to the model as an obstacle with voxel geometry.' It distinguishes itself from sibling geometry tools and obstacle-creation tools by naming the exact transformation (Shape Studio -> FDS). An agent can identify this as the shape-to-obstacle conversion step without opening a schema.

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?

Gives strong conditional guidance: 'Recommended: align_to_mesh=true', shell vs solid based on whether the mesh is hollow, and voxel_size vs per-axis cell. It does not name alternative tools (e.g. shape_preview_voxels or add_obstacle) or state when not to use this tool, so routing vs siblings is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_export_stlShape export stlA

Shape Studio → CFD (OpenFOAM etc.): export the exact CSG mesh as STL (no voxelization). ascii=true for text STL with solid name (snappyHexMesh patch name). Units m, z-up. [bulc-mcp] Writes files on this PC at the path you give.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesOutput .stl absolute path
asciiNo
node_idNo
solid_nameNoASCII solid name (default: shape)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), and the description adds value beyond them: it warns that files are written on the local PC at the given path, and documents units (m, z-up) and the exact-CSG guarantee. Missing only error/overwrite 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?

Front-loaded with purpose, followed by the ascii/solid_name detail, units, and a bracketed file-write warning. Every sentence earns its place with no filler.

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?

For an export tool with no output schema, the description carries the essentials: destination path semantics, units, z-up orientation, exact-mesh guarantee, and the local file-write side effect. The one gap is the undocumented node_id parameter.

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 coverage is 50% (path and solid_name documented; ascii and node_id not). The description compensates for ascii (text STL) and solid_name (snappyHexMesh patch name), which is meaningful beyond the schema, but node_id remains unexplained in both places, so it only partially closes the 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?

States a specific verb+resource: export the exact CSG mesh as STL. The 'no voxelization' clause genuinely distinguishes it from shape_preview_voxels and the other shape_export_* format siblings, 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear use context by naming the destination workflow (CFD / OpenFOAM, snappyHexMesh patch names) and the ascii=true flag for text STL, so an agent knows the scenario this serves. No explicit exclusions or named alternatives, which keeps it at a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_extrude_sketchShape extrude sketchA

Shape Studio (SketchUp-style): draw closed 2D loops on ANY plane and extrude them along the plane normal. plane = {origin:[x,y,z], normal:[nx,ny,nz], x_axis:[ax,ay,az]} (x_axis ⟂ normal; y = normal × x_axis); loops = [[[u,v],...], ...] in plane coords, even-odd fill so inner loops become holes. distance (m, sign = along/against normal). mode "new" makes a separate solid; "add"/"cut" fuses into / carves out of target_id (the result replaces target in the tree). Booleans are watertight (manifold kernel), so coplanar faces are fine.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
nameNo
colorNo
loopsYes
planeYes
surf_idNo
distanceYes
target_idNoRequired for add/cut

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations (readOnly=false, idempotent=false, openWorld=false) by disclosing that add/cut replace the target in the tree, that the boolean kernel is manifold/watertight and tolerates coplanar faces, and that distance sign selects direction. It omits error conditions, permissions, and what is returned. Minor tension: 'cut' carves material out of an existing solid while destructiveHint is false, though the description at least discloses the mutation explicitly.

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 dense but front-loaded paragraph: the operation leads, followed by plane math, loop semantics, mode/target behavior, and the robustness note. Every clause carries information with no filler, though the run-on density slightly hurts scannability.

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?

For an 8-parameter geometry tool with no output schema and low schema coverage, the description is unusually complete on inputs, plane parameterization, and tree effects. The main gap is return behavior — it never says whether a new item id is produced for mode 'new' — which matters for chaining with tools like shape_set_params or shape_boolean.

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 only 13%, so the description must carry the load and largely does: it defines the plane object (origin/normal/x_axis with x_axis ⟂ normal and y = normal × x_axis), the loops array format with even-odd fill turning inner loops into holes, distance units and sign, and mode/target_id coupling. Only name, color, and surf_id are left unexplained, and those are self-evident.

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+resource with scope: 'draw closed 2D loops on ANY plane and extrude them along the plane normal.' It is clearly distinguishable from sibling geometry tools like shape_push_pull, shape_add_polygon_prism, and shape_boolean because it names the loop-extrusion operation rather than restating its own name.

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 through mode semantics — 'new' makes a separate solid, 'add'/'cut' fuse into or carve out of target_id, which requires target_id (also noted in the schema). However, it never states when to prefer this over shape_push_pull, shape_boolean, or shape_add_polygon_prism, and gives no exclusions or preconditions beyond the target_id note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_get_item_fds_propsShape get item fds propsB
Read-onlyIdempotent

Item library: read the FDS properties and metadata of a registered item.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes

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 structurally. The description adds only the "Item library" framing and that a registered item is required — useful but thin, with no mention of failure behavior for an unknown/unregistered ID.

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 front-loaded sentence with no filler; "Item library:" acts as a useful domain prefix rather than waste. It is arguably too terse rather than padded, so size is not the problem.

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?

For a read-only getter with no output schema, the description should at least hint at what is returned and how to obtain the item_id. "FDS properties and metadata" gestures at the return payload, but the ID provenance and error cases for a non-existent item are absent.

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?

The single required parameter item_id has 0% schema description coverage (type string only), so the description carries the burden and only weakly compensates by saying the item is "registered" — it never states the ID's format or that it comes from shape_register_item. Syntax and provenance of the identifier remain undocumented.

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 (read) and resource (FDS properties and metadata of a registered item) in the first sentence. It implicitly contrasts with the sibling shape_set_item_fds_props via "read" vs writing, but never names or explicitly distinguishes the counterpart, so it lands just short of 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: this is the inspection counterpart to registering/setting an item (shape_register_item, shape_set_item_fds_props exist as siblings). No explicit when-to-use, prerequisites, or exclusions are given, so the agent must infer that an item must already be registered before calling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_get_treeShape get treeA
Read-onlyIdempotent

Shape Studio: get the current feature tree (nodes, params, roots, bounding boxes). Call this to see what exists before editing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/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 value by disclosing the shape of the returned data, which matters because no output schema exists.

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 tight sentences with the resource and return contents front-loaded, followed by the usage cue. No redundancy or filler.

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 output schema, the description's enumeration of return contents (nodes, params, roots, bounding boxes) fills the gap adequately for a zero-parameter read tool. Minor omission: nothing about scale/pagination or whether it reflects unsaved state.

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 schema has nothing to convey and the baseline is 4. The description correctly implies a no-argument, whole-document read.

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 (get) and resource (the current feature tree) and enumerates what the tree contains (nodes, params, roots, bounding boxes). This distinguishes it from the many shape_* mutators in the sibling list, though it doesn't name any sibling explicitly.

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?

"Call this to see what exists before editing" gives a clear trigger condition tied to the editing workflows in the sibling set. It stops short of stating exclusions (e.g., it is not the tool for querying a single node's properties), but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_hullShape hullC

Shape Studio: convex hull of the given nodes (blob/rounded forms).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
inputsYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the agent knows this is a non-destructive write. The description adds only '(blob/rounded forms)' as output character; it does not say whether a new shape is created, whether the source nodes are consumed/kept, or what makes repeated calls non-idempotent.

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 compact sentence, front-loaded with the tool family and the operation. Nothing is padded, though the extreme brevity is what leaves the gaps above.

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?

For a mutating geometry-construction tool with no output schema and a 0%-documented schema, the description should explain the input semantics and the effect on the document. Neither is covered, so an agent cannot invoke it confidently beyond guessing that 'inputs' is a node list.

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 both parameters are bare. The required 'inputs' array of strings is the crux of the tool and is never explained; 'the given nodes' only loosely suggests it is the node list, without saying whether these are IDs, names, or coordinates. The optional 'name' parameter is not mentioned at all.

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 geometric operation (convex hull) on a specific input (the given nodes), which distinguishes it from sibling primitive-creators like shape_add_box or shape_add_sphere. It stops short of stating that it produces a new shape node in the document, so the verb of effect is implied rather than explicit.

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?

No guidance on when to use this versus the many other shape tools (boolean, extrude, revolve, add_*). The '(blob/rounded forms)' parenthetical hints at an output style but not at a selection condition. An agent gets no routing help in a sibling list of ~150 tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_import_meshShape import meshA

Shape Studio: import an STL or OBJ file as a mesh node (metres). y_up=true if the file is Y-up (converted to Z-up). For GLB/FBX use the Shape Studio UI import button.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNo
nameNo
pathYesAbsolute file path (.stl/.obj)
y_upNo
scaleNoUniform scale (e.g. 0.001 for mm files)
surf_idNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-destructive, non-idempotent, closed-world operation, so safety is covered. The description adds genuinely useful behavior beyond that: the metres unit convention and the automatic Y-up to Z-up axis conversion, which is a real data transformation the caller must know about. It still omits preconditions (must a document be open?) and whether repeated imports stack new nodes.

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?

Three short sentences, front-loaded with the action and scope, then the coordinate-flag explanation, then the unsupported-format redirect. No filler and nothing buried.

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?

With no output schema, the description should say what an import produces (a node id? a tree entry?) so the agent can chain into shape_edit_node or shape_set_params, and it should state whether an existing document is required. It covers formats, units, and axis handling but leaves those integration points unaddressed.

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 coverage is only 33%, and the description compensates for two gaps: it defines the unit system (metres) and explains y_up as 'true if the file is Y-up (converted to Z-up)', which the schema leaves completely undescribed. However, at, name, and surf_id get no explanation in either place.

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 and resource ('import an STL or OBJ file as a mesh node') and scopes the supported formats explicitly, which cleanly separates it from the shape_export_stl/shape_export_obj siblings that move data the other direction. The 'Shape Studio:' prefix identifies the owning subsystem.

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?

Gives a concrete routing condition: for GLB/FBX use the Shape Studio UI import button, which tells the agent when this tool does not apply. It does not name any MCP sibling alternative, but no sibling tool performs mesh import, so the gap is minor.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_mirrorShape mirrorA

Shape Studio: mirror a node across a plane ('xy'|'yz'|'xz', offset = plane position). keep_original default true (result = original + mirrored union).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
inputYes
planeYes
offsetNo
keep_originalNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare it is not read-only, not idempotent, and not destructive. The description adds useful behavior beyond that: keep_original defaults to true and the result is the original plus mirrored union, which is exactly the kind of output-shape context an agent needs.

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 dense sentences with no wasted words. The operation is front-loaded, and the plane/offset/default details follow immediately with clear parenthetical qualifiers.

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?

For a 5-parameter shape mutation tool with no output schema and low schema coverage, the description covers the core operation and three parameters well. It still leaves the name parameter and the exact nature of the input node reference unexplained, so an agent may need to inspect the schema further.

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 explains plane ('xy'|'yz'|'xz'), offset (plane position), and keep_original (default true, result semantics), and implies input is the node being mirrored, but it says nothing about the name parameter.

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 verb and resource ('mirror a node across a plane') and clarifies the plane enumeration and offset meaning. It does not explicitly differentiate itself from nearby shape tools such as shape_transform or shape_boolean, so it is clear but lacks sibling routing.

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 when-to-use guidance, no prerequisites, and no mention of alternatives like shape_transform or shape_boolean. The 'Shape Studio' prefix implies a context, but the agent is left to infer when mirroring is the right operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_new_documentShape new documentA

Shape Studio: start a new empty shape document (discards current shape tree).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the call 'discards current shape tree,' i.e. destructive loss of in-memory state, while the annotations declare destructiveHint=false. This is a direct inconsistency about the tool's safety profile, so it is flagged as an annotation contradiction.

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?

A single sentence, front-loaded with the verb and resource, with the consequential side effect in a trailing parenthetical. No filler, no repetition of the title.

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?

For a zero-parameter tool with no output schema, the description covers purpose and the destructive side effect. It could say more about the resulting state (empty document ready for shape_add_* calls) or reversibility via shape_undo, but the essentials are present.

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 input schema is an empty object with zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless 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 and resource ('start a new empty shape document') with an explicit scope qualifier ('empty'), which cleanly distinguishes it from siblings like shape_add_box, shape_get_tree, and project_new. An agent can identify the action without opening any schema.

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 parenthetical warning that the current shape tree is discarded, which signals 'only call this when you want to discard existing shapes.' However, it names no alternative (e.g., project_new vs a new shape document) and gives no explicit when-to-use/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_preview_voxelsShape preview voxelsA

Shape Studio: switch the viewport into FDS voxel preview mode — it shows exactly what the shape becomes once voxelized into FDS OBST boxes (including the fire faces). size = voxel edge in metres (default 0.1), off=true returns to the smooth CSG view. Call this before shape_screenshot to review the FDS result rather than the ideal mesh. GUI only (no effect headless). [bulc-mcp rules] GEO-009 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
offNotrue = leave preview mode
sizeNoVoxel edge (m), default 0.1

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds real behavioral context beyond these: it is a view-mode toggle, off=true reverts to the smooth CSG view, it only affects GUI (no effect headless), and it includes fire faces. It does not explicitly state persistence or that it changes no project data, but the mode semantics are well disclosed.

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 action, then covers parameters, usage ordering, and the GUI restriction in dense, purposeful sentences. The trailing '[bulc-mcp rules]' line is auto-appended boilerplate outside the author's control but slightly dilutes the close.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter GUI view toggle with no output schema and full schema coverage, the description covers purpose, both parameters, usage ordering relative to shape_screenshot, and the headless limitation. Nothing an agent needs to invoke it correctly is missing.

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 coverage is 100%, so the schema already documents both parameters with defaults. The description restates size (voxel edge in metres, default 0.1) and off (returns to smooth CSG view), adding only clarifying phrasing rather than new syntax or constraints. Baseline 3 is appropriate.

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 ('switch the viewport into FDS voxel preview mode') and resource, and scopes it precisely to the Shape Studio viewport. It distinguishes itself from siblings like shape_screenshot by explaining it renders the voxelized FDS OBST result rather than the ideal CSG mesh.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Call this before shape_screenshot to review the FDS result rather than the ideal mesh', naming the alternative and the selecting condition. It also gives a when-not condition: 'GUI only (no effect headless)'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_push_pullShape push pullA

Shape Studio (SketchUp Push/Pull): pick a flat face of node_id and push it in (negative distance → carves) or pull it out (positive → extends the solid). The face is the whole coplanar region reached from the triangle whose outward normal matches face ("+x","-x","+y","-y","+z","-z" or [nx,ny,nz]); point [x,y,z] selects among several faces facing that way (nearest wins), otherwise the outermost one. Works on any node, including results of earlier push/pulls and booleans. Example: box then shape_push_pull(face:"+z", distance:0.5) raises the top by 0.5 m.

ParametersJSON Schema
NameRequiredDescriptionDefault
faceYes"+x","-x","+y","-y","+z","-z" or a normal vector [nx,ny,nz]
nameNo
pointNo
node_idYes
distanceYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare mutation and non-idempotency (readOnlyHint=false, idempotentHint=false), and the description adds real value beyond them: the sign convention (negative carves, positive extends), that the operation mutates existing solids, and implicit units via the '0.5 m' example. It doesn't mention undo/reversibility despite a sibling shape_undo existing, so it falls short of the top band.

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?

Three sentences, purpose front-loaded, then face-resolution rules, then an example that anchors the mental model. Dense but every sentence earns its place; the long parenthetical about normals is the only slightly heavy patch.

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?

For a 5-parameter mutation tool with no output schema and low schema coverage, the description covers the operation, its direction semantics, target resolution, and applicability to derived geometry, which is enough to call it correctly. Missing items are minor: the 'name' parameter and any return/confirmation detail.

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 coverage is only 20% (only 'face' documented), so the description must compensate, and it largely does: it explains face normal syntax (+x/-x/... or [nx,ny,nz]), how 'point' disambiguates among coplanar faces (nearest wins, else outermost), and the sign meaning of 'distance'. The 'name' parameter remains entirely unexplained.

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+resource ('push/pull a flat face of a node') and immediately distinguishes itself from neighbors like shape_extrude_sketch and shape_transform by naming the SketchUp-style face-editing operation. An agent can tell what it does without opening the schema.

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?

Gives clear operative context: what counts as a face, how the coplanar region is resolved, and that it works on any node including results of earlier push/pulls and booleans, plus a concrete worked example. It stops short of explicitly naming an alternative (e.g. shape_extrude_sketch) for when a full extrude is preferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_register_itemShape register itemA

Shape Studio: voxelize the shape and register it as a reusable library item (furniture/item catalog). It then appears in the Item panel and can be placed like any furniture. Optionally set FDS fire properties at the same time.

ParametersJSON Schema
NameRequiredDescriptionDefault
iconNoEmoji icon (default 📦)
nameYesItem display name
colorNo
hrrpuaNoFire HRRPUA (kW/m²) when burning
node_idNoNode to register (default: union of visible roots)
categoryNoCatalog category (default user_item)
materialNoMaterial description (e.g. wood, PU foam)
voxel_sizeYesVoxel edge (m), e.g. 0.05
combustibleNoIs the item combustible

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (not read-only, not destructive, not idempotent, closed-world). The description usefully adds that the shape is voxelized, becomes a reusable library entry, appears in the Item panel, and can carry FDS fire properties concurrently. It does not flag that idempotentHint=false means repeated calls likely create duplicate catalog entries.

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?

Three sentences, front-loaded with the 'Shape Studio:' scoping prefix and no filler. Each sentence adds a distinct fact (voxelize/register, catalog visibility, optional FDS props).

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?

For a 9-parameter, no-output-schema mutation tool, the description covers the essential outcome (what is created and where it shows up) and the optional FDS angle. It leaves some gaps around the non-idempotent duplicate risk and the required name/voxel_size pair, but the schema carries defaults and required flags.

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 coverage is high (89%), so the baseline is 3, and the description lifts it by tying the 'FDS fire properties' clause to the hrrpua/combustible/material parameters, giving them practical context. It adds little on voxel_size or node_id beyond what the schema documents.

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 compound verb (voxelize + register) and resource (reusable library item / furniture catalog), plus the resulting placement behavior. It reads as a clearly distinct operation from siblings like shape_set_item_fds_props or place_furniture, though it never names an alternative to contrast against.

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 rather than stated: the agent can infer this is the tool to mint a new catalog item after shaping geometry, and the 'optionally set FDS fire properties at the same time' clause hints at a relationship with shape_set_item_fds_props. No explicit when-to-use vs. when-not, and no prerequisites or ordering advice are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_screenshotShape screenshotA
Read-onlyIdempotent

Shape Studio: capture a screenshot of the running GUI (Shape Studio opens automatically) so you can visually REVIEW the shape you built. Returns a PNG file path — read the image, compare against reference photos, then fix with shape_set_params. select_node opens that node in the property panel first (e.g. to review fire faces / HRR chart). Live GUI mode only. [bulc-mcp] Writes files on this PC at the path you give.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOutput PNG path (default: temp folder)
select_nodeNoNode id to select before capture (shows its property panel)

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds real behavioral context beyond the annotations (Shape Studio opens automatically, returns a PNG file path rather than inline image data, GUI-mode-only requirement). However, the note that it 'Writes files on this PC at the path you give' directly conflicts with the declared readOnlyHint=true, which asserts the tool does not modify its environment.

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 action and return value, then workflow, then parameter semantics and constraints. Slightly dense, but each clause (auto-launch, PNG path, live GUI only, node selection) carries usable information and none is redundant.

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?

No output schema exists, and the description compensates by naming the return value (PNG file path) and how to consume it. With only two optional parameters and full schema coverage, everything needed to invoke the tool correctly is present; the only loose end is the annotation/behavior mismatch.

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 coverage is 100%, so baseline is 3. The description goes beyond the schema by explaining the *purpose* of select_node ('opens that node in the property panel first, e.g. to review fire faces / HRR chart'), giving an agent a concrete reason to set it rather than just its mechanics.

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?

Specific verb+resource: 'capture a screenshot of the running GUI' in Shape Studio, with the purpose ('visually REVIEW the shape you built') stated up front. It is clearly distinguishable from sibling capture tools (e.g. capture_view for result plots) by naming Shape Studio and the shape-review workflow.

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?

Gives a clear workflow context: capture, read the image, compare against reference photos, then fix with shape_set_params — effectively naming the next alternative tool. It also states a hard precondition ('Live GUI mode only'), but does not explicitly exclude or compare against the other screenshot/view-capture siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_set_item_fds_propsShape set item fds propsA
Idempotent

Item library: set FDS fire/material properties on a registered item (shown via the item panel's 'Library FDS Properties' button and applied when the item is placed). Sets a 'fire' preset override.

ParametersJSON Schema
NameRequiredDescriptionDefault
hrrpuaNoHRRPUA (kW/m²)
item_idYesItem id (from shape_register_item or list)
ramp_idNoRAMP id (auto-generated when ramp_points given)
co_yieldNo
materialNo
fire_areaNoBurning area (m²)
fuel_typeNoFuel label (e.g. WOOD_OAK, PU_FOAM)
hcn_yieldNo
tmp_frontNoIgnition surface temperature (°C, default 340)
soot_yieldNo
combustibleNo
ramp_pointsNoHRR time curve [[t,frac],...] 0..1
spec_formulaNoSPEC FORMULA (e.g. C6.3H7.1O2.1N1.0)
heat_of_combustionNokJ/kg
radiative_fractionNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish mutation/non-destructive/idempotent, so the bar is lower. The description adds genuinely non-obvious behavior: the change is edited via the Library FDS Properties panel and only takes effect when the item is placed, and that it installs a 'fire' preset override. It does not describe handling of unset fields, which is the one remaining gap.

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?

Two sentences, front-loaded with the operation and scope, no filler. The UI-button aside is mildly parenthetical but earns its place by explaining where the value surfaces.

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?

For a 15-parameter mutation tool with no output schema, the description covers what it targets and when it takes effect but omits whether the set is a full replace or a partial merge, and how the required item_id must be sourced (only implied by the schema). Adequate but with clear gaps.

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 coverage is 60%, so the schema documents most parameters with units (kW/m², °C, kJ/kg, etc.). The description only supplies group-level framing ('fire/material properties', 'fire preset override') and adds no per-parameter meaning for the undocumented tail, leaving it between the high- and low-coverage baselines.

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?

Specific verb (set) plus resource (FDS fire/material properties) plus target (a registered item), and it frames the scope as the item library. An agent can separate it from the getter sibling shape_get_item_fds_props, though it does not name that sibling 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?

The description implies when this is relevant (item-library FDS properties, applied when an item is placed), which gives usable context. It never states when to prefer this over shape_set_params or set_fds_properties, nor any exclusions, so no explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_set_paramsShape set paramsA
Idempotent

Shape Studio: change parameters of an existing node — everything downstream recomputes automatically (parametric). e.g. {id:"s3", params:{r:0.4}} or {params:{translate:[1,0,0]}} on a transform node.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
paramsYesPartial node params to merge (same keys as creation)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds genuinely new behavior: downstream nodes recompute automatically, which is a side effect beyond the edited node and is not encoded in any annotation or schema field.

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?

One front-loaded sentence plus two compact examples; every element (scope, propagation semantics, call shape) earns its place with no filler.

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?

For a 2-parameter mutation tool with annotations and no output schema, this covers the mutation semantics and a couple of concrete call shapes. It leaves open which node types are valid targets and what happens on an unknown key or id, both of which the schema also fails to document.

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?

With only 50% schema coverage (the 'id' property is undocumented), the examples carry real weight: they show the id+params form, a geometry key ('r'), and a transform key ('translate:[1,0,0]'), which is not inferable from the schema alone. It doesn't explain valid key sets per node type, but it meaningfully compensates 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?

States a specific verb and resource ('change parameters of an existing node') and adds the key property that the model is parametric, so changes propagate downstream. It does not distinguish itself from the nearby sibling shape_edit_node, leaving the agent to infer the boundary between 'set params' and 'edit node'.

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?

The two inline examples imply the shape of a typical call, but there is no explicit when-to-use statement and no contrast with shape_edit_node, shape_transform, or shape_set_item_fds_props. Usage is inferable from the examples rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_transformShape transformA

Shape Studio: wrap a node with translate/rotate/scale. To move an existing shape, prefer shape_set_params on its transform node if it has one.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
inputYesNode id
scaleNo
translateNo
rotate_degNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare this is a mutation (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the safety profile is already covered. The description adds that a wrapper node is created and when to prefer the alternative, but says nothing about units, coordinate frame (local vs world), or whether repeated calls stack transforms — meaningful gaps for a non-idempotent transform tool.

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 sentences, front-loaded with the purpose and then the routing rule. No filler; every clause carries information.

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?

For a mutating, non-idempotent transform tool with no output schema and low parameter coverage, the description covers the main routing decision but omits transform conventions, return value (e.g., the new transform node id), and repeated-call behavior. Adequate but with clear gaps an agent would need to resolve elsewhere.

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 only 20% (only 'input' is documented as 'Node id'). The description names translate/rotate/scale, which maps to three of the five parameters, but does not explain the required 3-element array order, whether rotate_deg is Euler angles, or the units/origin used. Baseline 3 given partial compensation.

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: wrapping a node with translate/rotate/scale. It also names the sibling it should not be confused with (shape_set_params on a transform node), which helps an agent distinguish it. Slightly short of 5 because 'wrap' leaves some ambiguity about what exactly is created (a transform container vs. a modified node).

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?

Explicitly routes the agent: 'To move an existing shape, prefer shape_set_params on its transform node if it has one.' That is a real when-to-use-other rule with a condition. It doesn't cover other plausible alternatives (shape_edit_node, shape_array) or state prerequisites, so not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shape_undoShape undoB

Shape Studio: undo the last document mutation.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the key traits: not read-only, not idempotent, not destructive. The description adds only that the affected object is the *last* mutation, which is useful scoping but no further behavior (stack limits, behavior when nothing to undo, pairing with redo).

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, namespace-prefixed and front-loaded, with no filler. It is perhaps overly terse given the open questions about scope and redo, but nothing is wasted.

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?

For a zero-param mutation with no output schema, the description is minimally adequate. It omits what happens on an empty undo stack and how it relates to redo or to project-level undo, which an agent would want before invoking.

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 no parameters, so there is nothing for the description to clarify; it correctly signals the zero-argument nature by describing only the single affected target.

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 (undo) and resource (last document mutation) scoped to Shape Studio. It is distinguishable from most siblings, though the boundary with the sibling project_undo is left implicit.

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?

No guidance on when to use this versus project_undo, nor any mention of a redo counterpart or the depth of the undo stack. The agent must infer the usage context entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sim_log_tailSim log tailA
Read-onlyIdempotent

Last lines of the engine console output of the current / last run (lines ≤ 500, default 60). grep = optional regular expression filter. Read-only. [bulc-mcp rules] GEN-016, SIM-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
grepNoOnly lines matching this regular expression (case-insensitive)
linesNoNumber of lines (default 60, max 500)

TDQS

A3.5/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 the safety profile is fully covered structurally. The description redundantly restates 'Read-only' and adds the 500-line output bound, which is useful, but discloses no pagination, truncation, or error behavior beyond that. A 3 reflects modest added value over 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?

The core content is a single front-loaded sentence covering output source, bound, default, filter, and read-only status. The trailing 'bulc-mcp rules' line references opaque rule IDs and a sibling tool without explanation, which is mild noise rather than useful guidance.

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?

For a simple two-parameter read tool with no output schema, the description adequately conveys what is returned (bounded console lines) and the available filter. The bounded/truncation nature is disclosed via 'lines <= 500', leaving little an agent needs that is missing.

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 100%, so both grep and lines are already fully documented in the schema. The description echoes the same facts (regex filter, default 60, max 500) without adding syntax or format detail beyond the structured fields, so baseline 3 applies.

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 verb and resource clearly: retrieving the last lines of the engine console output for the current/last run. This distinguishes it from mutating siblings like sim_start/sim_stop, though it does not explicitly name a contrast tool. Purpose is unambiguous without opening the schema.

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?

It implies usage by scoping to 'the current / last run' console output, giving an agent enough context to know when it applies. However, there is no explicit when-to-use/when-not guidance or reference to alternatives such as sim_status or results_detect for other diagnostic needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sim_preflightSim preflightA
Read-onlyIdempotent

Pre-run check with structured results: every issue carries a knowledge-pack rule id (e.g. OUT-001, VENT-001, MESH-002). Combines validate_project, the run dialog deck checks (output intervals ≥ T_END, deck reference errors CPU FDS rejects, fires outside the mesh, spray keys the chosen GPU solver ignores, LOCK_TIME_STEP stability hint) and grid resolution advice (D*/dx from the peak HRR). ok=false means do not run. solver = gpu (default) | gpu_cutcell | cpu_openmp. Read-only. [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
solverNoSolver to check against (default gpu)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description adds real context beyond them: results are structured, every issue carries a knowledge-pack rule id, and ok=false is a hard gate on running. It repeats "Read-only" redundantly and doesn't describe the full result shape, but the gate semantics are valuable.

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 purpose and then dense with genuinely informative check categories; each clause carries content rather than filler. It is a single heavy sentence-chain and the trailing bulc rule-id reference is cryptic, keeping it just below the top mark.

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 output schema, the description carries the return-value burden, and it adequately characterizes the output (structured issues tagged with rule ids, an ok flag with a clear meaning). The solver-mode implications for which checks apply are hinted but not fully spelled out, leaving a small gap.

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 coverage is 100% with a single enum param, so the schema already documents solver entirely. The description restates the enum values and the gpu default without adding format or behavior meaning beyond what the schema provides; baseline 3 applies.

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 and resource (a pre-run validation check) and enumerates the concrete checks it aggregates (validate_project, deck reference errors, D*/dx resolution advice). By naming validate_project, deck checks and grid-resolution advice as its components, it implicitly positions itself as the superset of sibling single-purpose validators like validate_project and bulc_check_deck.

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?

"Pre-run check" plus "ok=false means do not run" establishes clear timing and the decision it drives, and mentioning that it combines validate_project signals why an agent shouldn't call the narrower validators separately. However, it never explicitly states when NOT to use it or names an alternative to route to instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sim_startSim startA

Start the fire simulation in the running app after the user agreed (confirm=true required). Runs sim_preflight first and refuses on errors (force=true only if the user explicitly accepts). The deck is written next to the saved project (.bulc → .fds, like the toolbar RUN) or, for an unsaved project, to Documents/bulc_/. Refuses while another run is active. solver = gpu (default) | gpu_cutcell | cpu_openmp; restart=true resumes from the checkpoint. Then poll sim_status. Live app only. [bulc-mcp] Starts the solver (GPU for minutes to hours): sim_preflight, summary, the user's go-ahead first (GEN-016). [bulc-mcp rules] GEN-006, GEN-010, GEN-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoStart even if sim_preflight reports errors (default false)
solverNo
confirmYesMust be true — the user has agreed to this action
restartNoResume from the restart checkpoint (default false)
locationNoproject (default when the project is saved) | documents
cpu_threadsNocpu_openmp: OpenMP threads
folder_nameNodocuments: sub-folder name (default CHID)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-readonly, non-destructive, non-idempotent write, and the description adds substantial behavior on top: refusal while another run is active, hard refusal on preflight errors, deck emission path (.bulc → .fds next to the saved project, or Documents/bulc_<folder>/ for unsaved projects), run duration (GPU minutes to hours), and checkpoint resume semantics for restart=true.

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 action and the hard confirm requirement, and the dense middle sentence packs real constraints (preflight refusal, force, deck paths, active-run refusal) without filler. Slight redundancy: the [bulc-mcp] lines restate the preflight / user-go-ahead requirement already made in the first sentence, and the rules reference is metadata rather than guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, irreversible, long-running action with no output schema, the description covers prerequisites, gating conditions, side effects (deck file written to disk), expected duration, and the follow-up polling step. Nothing needed to invoke it safely is missing.

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 coverage is 86%, so most parameters are already documented, but the description still adds meaning: solver's default (gpu) which the schema enum does not state, restart=true as checkpoint resume, force tied to explicit user acceptance, and location's default tied to whether the project is saved. Only cpu_threads/folder_name get no extra narrative, and those are covered in the schema.

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?

Specific verb + resource ("Start the fire simulation in the running app") with the live-app scope stated, which separates it from the headless/other run siblings and from the sim_stop / sim_status / evac_run family. An agent can tell what this does and what it is not without opening the schema.

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?

Explicit preconditions and sequencing: sim_preflight runs first, the tool refuses on preflight errors unless force=true and the user has explicitly accepted, confirm=true is required because the user must have agreed, and the agent should poll sim_status afterwards; "Live app only" excludes a whole context. No guidance on when to prefer it over the similarly-named run_simulation sibling, which is the one remaining gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sim_statusSim statusA
Read-onlyIdempotent

Status of the current / last fire simulation of this app session: running or finished, exit code, simulated time vs T_END (percent, ETA), step, dt, CFL, HRR (kW), Tmax (K), max velocity, NaN count, health flags (nan=0, Tmax ≤ 2500 K, |u| < 50 m/s) and sprinkler / detector activation times read from the engine log. Read-only. [bulc-mcp rules] GEN-010, GEN-016, SIM-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description goes further by naming the data source ('read from the engine log'), disclosing health flag thresholds (nan=0, Tmax ≤ 2500 K, |u| < 50 m/s) and the exact returned metrics, which is useful behavioral context.

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 purpose and tightly packed; every enumerated field earns its place because no output schema exists to document return values. It is a single dense run-on sentence that would be more scannable as a list, but there is no wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only status tool with no output schema, the description fully compensates by enumerating the returned fields, thresholds and log source. Nothing an agent needs to interpret or trust the result is missing.

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 there is no parameter semantics burden to carry; baseline is 4.

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+resource ('Status of the current / last fire simulation') and scopes it to 'this app session', then enumerates the exact fields returned. An agent can distinguish it from sim_start, sim_stop and sim_log_tail without opening a schema.

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?

Implied usage (poll simulation progress/health) is clear from the field list, and the 'current / last ... of this app session' phrasing scopes it. However, it names no alternatives (e.g. sim_log_tail, get_simulation_metrics, results_detect) and gives no explicit when-to-use/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sim_stopSim stopA
Destructive

Stop the running fire simulation (confirm=true). mode graceful (default) writes .stop so the engine finishes its output files and a restart checkpoint; mode kill ends the process at once (results may be incomplete). Live app only. [bulc-mcp rules] GEN-016, SIM-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
confirmYesMust be true — the user has agreed to this action

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds real behavioral context: graceful writes a <CHID>.stop file to let the engine flush outputs and a restart checkpoint, whereas kill truncates results. It also discloses the 'Live app only' constraint — substantive detail beyond the structured hints.

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 action and confirm requirement, then details mode tradeoffs compactly. The trailing '[bulc-mcp rules]' metadata line is useful for rule lookup but slightly dilutes the otherwise tight prose.

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?

For a destructive, no-output-schema mutation tool, the description covers modes, confirmation, and the live-app precondition well. It omits edge cases such as behavior when no simulation is running or the failure/response format, which would round it out.

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 coverage is 50%; the 'mode' enum values are enumerated but undocumented in the schema, and the description supplies their meaning (graceful vs kill with data-loss implications). It also restates confirm=true's requirement, though that is already in the schema.

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 ('Stop') and resource ('the running fire simulation') with the required confirmation inline. It is trivially distinguishable from siblings like sim_start, sim_status, sim_log_tail, and evac_stop.

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 frames when to choose graceful (default, completes output files + restart checkpoint) versus kill (immediate, results may be incomplete), and adds the 'Live app only' precondition. It does not name alternative stop tools (e.g. evac_stop) or state when not to stop, so it stops short of a full when/when-not map.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slice_meshSlice meshA

Split one mesh into two at a plane (multi-mesh cutter). The coordinate snaps to that mesh's own grid lines, cell size is preserved on both halves, and OPEN vents crossing the plane are split too. Slicing the single mesh turns the project into a multi-mesh deck. Use list_meshes for index numbers. [bulc-mcp rules] MESH-001, MESH-005 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
axisYesAxis normal to the cut plane
coordYesCut position (m). Snapped to the nearest grid line of that mesh.
indexYesMesh index from list_meshes (0-based)

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral detail beyond the annotations: coordinate snapping to that mesh's own grid lines, cell size preserved on both halves, OPEN vents crossing the plane being split, and the project converting to a multi-mesh deck. This discloses side effects the readOnly/destructive hints cannot convey. It still omits reversibility/undo behavior and the identity of the resulting meshes.

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 core action and follows with tightly scoped side-effect facts; every sentence carries information. The trailing '[bulc-mcp rules] ...' clause is cryptic but functional as a lookup pointer rather than filler.

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 output schema, the description carries the return-effect burden and does so adequately: it explains the resulting state (multi-mesh deck), preservation of cell size, and vent splitting. Minor gaps remain around undo semantics and how the two new meshes are indexed.

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 100%, so the schema already documents axis, coord, and index, including the grid-line snapping. The description largely restates those points and adds only the 'mesh's own grid lines' nuance, so baseline 3 applies.

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: split one mesh into two at a plane, and clarifies the 'multi-mesh cutter' duality against the merge_meshes sibling. It never names an alternative tool explicitly, so differentiation is implied rather than stated, but the action 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides one concrete workflow pointer ('Use list_meshes for index numbers'), which implies the prerequisite step but gives no when-to-use/when-not guidance or explicit alternative (e.g. merge_meshes, set_meshes). Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_add_drainSpr add drainA

Add a drain hole (always-open orifice, flow = K√P, no required pressure): on a pipe at position (splits it with a new branch node), on an existing node, or at a free point. K defaults to the project nozzle K (drain hole = sprinkler orifice); orificeDiameterMm converts with Cd 0.62. [bulc-mcp rules] SPR-023 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
zNo
zoneNo
labelNo
lineNoNo
nodeIdNoOr put it on this node
pipeIdNoPut the drain on this pipe (new branch node)
kFactorNo
disabledNoClosed drain valve (not in the calculation)
positionNoPosition along the pipe from its start node 0..1 (default 0.5)
floorIndexNoFree point: story id
orificeDiameterMmNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic mutation profile (readOnly=false, destructive=false, idempotent=false). The description goes well beyond that: it discloses the flow model (K√P), that K defaults to the project nozzle K, that orificeDiameterMm is converted with Cd 0.62, and that placing on a pipe splits it into a new branch node. It does not note that repeated calls create duplicate drains despite idempotentHint=false, a minor gap.

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?

Two dense sentences front-load the purpose and placement modes with no filler, followed by a short rule pointer. The rule reference is cryptic but compact; nothing is redundant.

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?

For a 13-parameter, zero-required mutation tool with no output schema, the description covers the essential decision logic (which placement mode maps to which inputs) and the physics defaults that affect results. The remaining omissions are the coordinate/annotation parameters, which the schema partially covers via floorIndex.

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 coverage is only 38% across 13 parameters, so the description must carry weight. It usefully explains kFactor's default, the Cd 0.62 conversion for orificeDiameterMm, the pipe-position semantics, and disabled ('closed drain valve, not in the calculation'). But x/y/z, zone, label, and lineNo remain undocumented in both schema and description, leaving a real gap for free-point placement.

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 and resource ('Add a drain hole') and immediately qualifies it with the physical model ('always-open orifice, flow = K√P, no required pressure'), which separates it from sibling orifice tools like spr_add_sprinkler_head or add_nozzle. It also enumerates the three valid placements, so an agent knows exactly what object is created.

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?

The description gives clear context for the three placement modes (pipe + position, existing node, free point), which is effectively when to use each parameter set. However, it never contrasts this tool with the many sibling orifice/device tools (add_nozzle, spr_add_sprinkler_head, add_device) or states exclusions, so the choice between alternatives is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_add_nodeSpr add nodeA

Add a pipe network node (junction, sprinkler, or source). A junction can carry a fitting (elbow/tee/cross/wye/reducer); "auto" (default) detects it from the connected pipes. Node ids are generated by the store — call spr_list_summary to get them. [bulc-mcp] Give heads / terminals a unique label (H1, H2 …, EX1 …): it becomes the FDS id after *_apply_to_fds (GEN-021). [bulc-mcp rules] EVAC-001, SPR-001, SPR-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX position (m)
yYesY position (m)
zNoZ position (m, default 3.0)
typeYesNode type: junction | sprinkler | source
labelNoOptional label
fittingNoFitting at this node for minor losses: auto (default, detected from pipe count/angles/diameters) | none | elbow90 | elbow90_long | elbow45 | tee | cross | wye | reducer
floorIndexNoStory id (draw_list_stories id, 1 = first floor). Default: the story that contains z

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-readonly, non-destructive, non-idempotent mutation, and the description adds real context beyond them: node ids are generated by the store, and labels become FDS ids only after *_apply_to_fds. These downstream-effect details are exactly what annotations cannot convey.

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 core action and node types, then packs fitting behavior, id generation, labeling, and rule links compactly. The bulc-mcp bracketed tags are slightly noisy but each sentence carries information.

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?

For a mutation tool with no output schema, the description covers id generation, label-to-FDS-flow, fitting semantics, and rule references. It omits any note on what happens to the store state or how the new node relates to connected pipes, a minor gap.

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 100%, so the schema already documents x/y/z/type/label/fitting/floorIndex, including the 'auto' fitting detection logic. The description repeats the fitting default and label purpose but adds no syntax or meaning beyond the schema—baseline 3 applies.

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 ('Add a pipe network node') and enumerates the node types (junction, sprinkler, source), which lets an agent distinguish it from spr_add_pipe and spr_add_sprinkler_head. It does not explicitly name those siblings, so it stops short of full differentiation.

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 workflow hints ('call spr_list_summary to get' generated ids) and a labeling convention for heads/terminals, plus rule references. However, it never states when to use this tool versus alternatives like spr_add_pipe, spr_insert_fitting, or the specialized spr_add_sprinkler_head/spr_add_water_source siblings—usage is implied rather than specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_add_pipeSpr add pipeA

Connect two nodes with a pipe. For a floor-to-floor connection use spr_add_riser (exactly vertical) first, then connect horizontally on the upper story [bulc-mcp rules] SPR-002, SPR-008 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
lineNoNoLine number (drawing line, e.g. UL-716-40A_012) — results are grouped by it
valvesNoInline valves on this pipe (minor loss by equivalent length): gate_valve | butterfly_valve | check_valve | alarm_valve | globe_valve | angle_valve
cFactorNoHazen-Williams C (default: standard default; e.g. 100 dry black steel / sea water, 120 wet steel, 150 stainless/CuNi)
diameterNoNominal pipe diameter (mm, 6..600 depending on the standard; default uses store default)
materialNoPipe standard id (schedule included). Building: KSD3507 | CPVC | STS304 | ASTM_SCH40. Marine/plant: JIS_G3454_STPG_SCH40/SCH80, KS_D3562_SPPS_SCH40/SCH80, JIS_G3452_SGP, JIS_G3459_SUS_SCH10S/SCH40, ASTM_A53_A106_SCH40/SCH80, DIN86019_CUNI10FE (CuNi 90/10), … (enum). C resets to the standard default unless cFactor is given.
endNodeIdYesEnd node ID
startNodeIdYesStart node ID
valveDetailsNoValves with state: [{type, open (false = closed → pipe excluded), tag (e.g. WS-11U), zone (zone valve: open only in "all" and that zone), position 0..1}]. Overrides valves.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the safety bar is lower. The description adds the rule references (SPR-002/SPR-008) and the riser sequencing constraint, but says nothing about prerequisites (existing nodes) or what happens on an invalid connection.

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?

Two compact sentences with the core action front-loaded and the riser caveat second. The trailing "[bulc-mcp rules] SPR-002, SPR-008 — bulc_knowledge_search" fragment is terse and slightly cryptic but adds a lookup pointer without bloat.

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?

For an 8-parameter mutating add-tool with full schema coverage and no output schema, the core purpose and the key vertical-vs-horizontal workflow are covered. It is still thin on prerequisites (nodes must exist, matching story) and on what the call yields or how failures surface.

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 100%, and the inline docs already explain diameter units, material enums, C-factor defaults, and valve semantics (a closed valve excludes the pipe). The description adds no parameter-level meaning beyond that, so baseline 3 applies.

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?

"Connect two nodes with a pipe" is a specific verb+resource and the second clause explicitly separates this from spr_add_riser's vertical-only case. It doesn't differentiate against other nearby siblings such as spr_update_pipe or spr_insert_fitting, but the primary operation 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete routing guidance: for a floor-to-floor connection run spr_add_riser (exactly vertical) first, then connect horizontally on the upper story. That is a real when-to-use-an-alternative rule, though it offers no guidance on when not to call this tool (e.g. duplicates, cross-story horizontal runs).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_add_riserSpr add riserA

Floor-to-floor riser (e.g. 1F → 2F): a perfectly vertical pipe (same x,y, only z changes) from the node up/down to a NEW junction on the target story at targetZ (default: same height above the target story floor as the source node above its own floor). It never attaches to a nearby existing node; only a node at exactly the same position (±1 mm in x,y,z) is reused. Continue the upper network from the new junction (id via spr_list_summary). The riser is a normal pipe — the hydraulic calculation includes its static head ρgΔz and the elbows at its ends. Stories: draw_list_stories / draw_add_story. sameFloor=true makes a vertical pipe on the SAME story instead (drop / rise to targetZ or by dz, e.g. dz=-1.0 for a 1 m drop). [bulc-mcp rules] SPR-009 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
dzNosameFloor: height change (m, + up / − down)
nodeIdYesNode to start the riser from
targetZNoTarget node height (m)
diameterNoRiser nominal diameter (mm). Default: largest pipe at the node
materialNoMaterial (default: that of the attached pipe)
sameFloorNoVertical pipe on the same story (give targetZ or dz)
targetStoryNoTarget story name (e.g. "2F") — alternative to targetFloorIndex
targetFloorIndexNoTarget story id (draw_list_stories). Default: the story directly above (or below if none above)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply the generic mutability profile (readOnly=false, idempotent=false, destructive=false). The description adds real behavioral detail: it never attaches to a nearby existing node, only reuses a node at the exact position (±1 mm), always creates a NEW junction, and the riser participates in hydraulics with static head. Missing only failure/permission 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?

Front-loads the core purpose and geometry before defaults and edge cases. It is dense and a bit long, and the trailing '[bulc-mcp rules] SPR-009' line is ancillary, but most sentences carry distinct information.

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?

Eight parameters with no output schema, yet the description covers defaults, story selection, junction creation/reuse, and hydration implications, which is sufficient to invoke it correctly. It could be more explicit about the return (only pointing to spr_list_summary for the new junction id).

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 coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: the targetZ default (same height above the target story floor as the source node above its own floor), the sameFloor alternative with a concrete dz example, and the targetFloorIndex default story. These clarify ambiguous parameters rather than merely restating them.

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+resource (add a vertical floor-to-floor riser) and pins down the exact geometry (same x,y, only z changes). It clearly distinguishes the operation from the sibling spr_add_pipe by defining the riser as a perfectly vertical pipe with a new junction on the target story.

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?

Gives strong contextual guidance: how to continue the upper network from the new junction (via spr_list_summary), where to find stories (draw_list_stories / draw_add_story), and how sameFloor changes the behavior. It never explicitly states when to prefer this over spr_add_pipe, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_add_sprinkler_headSpr add sprinkler headA

Add a sprinkler head to an existing sprinkler node. The head follows a shared spray profile (sprayProfileId, default = project default profile); K / activation temperature / RTI default to that profile. spray / particle override single FDS &PROP / &PART keys for this head only. [bulc-mcp rules] SPR-010, SPR-011 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
rtiNoResponse Time Index (m·s)^½ (default: profile, 100 standard; quick response ≤ 50)
zoneNoDeluge zone tag (zone scenarios open only that zone)
sprayNoPer-head FDS &PROP overrides — same keys as spr_upsert_spray_profile.prop (e.g. {"particles_per_second":10000,"spray_angle":[0,70]}).
lineNoNoLine number
nodeIdYesSprinkler node ID
kFactorNoK-Factor in metric L/(min·bar^½) (default: profile K, 80 ≈ K5.6 US; US value × 14.41)
disabledNoExclude from the calculation (plugged / under repair)
headTypeNopendant | upright | sidewall (pendant and upright both spray downward — upright only changes SMOKEVIEW_ID)
particleNoPer-head FDS &PART droplet overrides — same keys as spr_upsert_spray_profile.part (e.g. {"diameter":800,"age":600}).
nozzleKindNoclosed = heat-activated sprinkler (default), open = open nozzle (deluge / water spray, discharges from the start), drain = drain hole (always open orifice, no required pressure)
nozzleModelNoNozzle model / datasheet name
activationTempNoActivation temp (°C, default: profile, 68)
coverageRadiusNoCoverage radius (m, default 2.3)
sprayProfileIdNoShared spray profile id (spr_list_summary / spr_upsert_spray_profile)
requiredPressureNoRequired discharge pressure of THIS nozzle [MPa] (0.1 MPa = 1 bar). Empty = design default per kind (spr_set_defaults)
orificeDiameterMmNodrain: orifice diameter [mm] → K = 0.66643·Cd·d²

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readOnly, non-idempotent, non-destructive behavior, lowering the bar. Beyond that, the description discloses the defaulting model (K/activation temp/RTI inherit from the shared spray profile) and the override scope (spray/particle affect 'this head only'), which is genuine behavioral context not carried by 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?

Front-loaded with the primary action, then the defaulting and override semantics in tight clauses. The trailing bulc rule reference is short and non-disruptive; there is minimal wasted text.

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?

For a 16-parameter creation tool with no output schema but full annotation coverage, the description supplies the key conceptual model (shared profile defaults plus per-head overrides) an agent needs to call it correctly. It omits error/precondition behavior for a missing node, but the essentials are present.

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 100%, so the schema already documents all 16 parameters, including defaults, enums, and units. The description reinforces the sprayProfileId/default relationship but adds little syntax or meaning beyond what the schema provides, so the baseline 3 applies.

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 and resource ('Add a sprinkler head to an existing sprinkler node'), with the attachment scope made explicit. This clearly distinguishes it from siblings such as spr_update_sprinkler_head, spr_remove_sprinkler_head, spr_add_node, and add_nozzle without the agent needing to open another schema.

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?

The description implies the use case (extending an existing node with a head) and points at the bulc rule set (SPR-010/SPR-011) for deeper guidance. However, it never explicitly states when to use this vs alternatives like spr_update_sprinkler_head or spr_set_nozzles, so usage is only implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_add_water_sourceSpr add water sourceB

Add a water source to an existing source node: city water (static / residual pressure at residual flow), pump (rated flow / rated head / shut-off head or a curve), gravity tank (water level elevation), pressure tank. [bulc-mcp rules] SPR-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesSource node ID
pumpCurveNoPump curve points [{flow L/min, pressure MPa}] (overrides rated/shut-off interpolation)
sourceTypeNocity_water | pump | gravity_tank | pressure_tank
tankVolumeNoTank volume (m³)
residualFlowNoResidual flow (L/min, default 1000) — city water
pumpRatedFlowNoPump rated flow (L/min)
pumpRatedHeadNoPump rated pressure (MPa) at the rated flow (1 MPa ≈ 102 m head)
tankElevationNoGravity tank water level elevation (m)
staticPressureNoStatic pressure (MPa, default 0.5) — city water / pressure tank
pumpShutoffHeadNoPump shut-off (churn) pressure at zero flow (MPa)
residualPressureNoResidual pressure (MPa, default 0.3) at residualFlow — city water

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=false, destructive=false, openWorld=false, so the safety profile is largely covered. The description adds configuration grouping (which parameters belong to which source type) but says nothing about mutation effects such as whether an existing source is overwritten, what errors occur, or what the tool returns on success.

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?

The first sentence is dense but well front-loaded, listing source types with their governing parameters. The trailing '[bulc-mcp rules] SPR-001 — bulc_knowledge_search "<id>"' fragment is opaque noise that does not earn its place and slightly disrupts structure.

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?

For an 11-parameter mutation tool with no output schema, the description adequately covers the source-type/parameter relationship. It omits error behavior, overwrite semantics, and success/return expectations, leaving gaps an agent would need to infer for a write operation.

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 coverage is 100%, so the schema already documents all 11 parameters individually, including per-source-type hints (e.g., 'city water', 'residual flow ... city water'). The description re-groups those parameters under each source type, adding modest organizational value but little meaning beyond the schema, matching the baseline 3 for high coverage.

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 ('Add a water source to an existing source node') and enumerates the four supported source types (city water, pump, gravity tank, pressure tank), which is more specific than a bare restatement. It does not explicitly contrast with spr_update_water_source or spr_remove_water_source, so sibling differentiation is only implied by the verb 'add'.

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?

The phrase 'to an existing source node' implies a prerequisite (a node must exist first, presumably via spr_add_node), which is useful context. However, there is no explicit when-to-use vs. when-to-use-an-alternative guidance (e.g., when to add vs. update a water source), and the cryptic '[bulc-mcp rules] SPR-001' line gives no actionable routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_analyze_drawingSpr analyze drawingA
Read-onlyIdempotent

Read a sprinkler / water-spray piping drawing (.dxf, .dwg, .pdf, .zip of drawings, .png/.jpg) and recognise a candidate pipe network. Isometric (ISO) drawings: scale from DIMENSION entities, pipe linetype, bends, flange/valve gaps bridged, nozzle stems, line-number / reducer / valve labels, 3D reconstruction (X,Y horizontal, Z up, inlet = origin), nominal sizes from labels and flange rings. Plan drawings: pipe layers + head symbols at one height. Returns a summary with candidateId, open ends (drain candidates), reference (dashed, other-system) labels, exclusion hints, runs and ambiguities to ask the user about. Attached chat files arrive as "[첨부 도면] name path=… candidateId=…". PDFs with outlined text set needsVision (read the page image instead). show=segments|nodes|runs|tags|components lists details (ids, offset, limit, component). Then call spr_import_network. [bulc-mcp rules] DRW-006 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoshow: only these segment / node / run ids
showNoWhat to return (default summary)
entryNozip only: entry name (or part of it) to show
limitNoshow: rows (default 60, max 200)
offsetNo
optionsNoRe-analysis options: projection (isometric|plan), pipeLinetypes / referenceLinetypes / detailLinetypes (DXF linetype names), layers / excludeLayers, scaleMmPerUnit (drawing unit → mm when the drawing has no DIMENSION), lineNoPattern (regex), rootHint [x,y] (drawing coords near the inlet), plan view: pipeLayers, headBlocks, headLayers, planHeightM; PDF: pages [1,2].
filePathNoAbsolute path of the drawing file
componentNoshow: only this connected component (0 = main network)
candidateIdNoId from an earlier analysis or the chat attachment (re-use without re-reading)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it explains what is recognised (bends, flange/valve gaps bridged, nozzle stems, reducer/valve labels), the 3D reconstruction convention (X,Y horizontal, Z up, inlet = origin), how attached chat files surface as '[첨부 도면] name path=… candidateId=…', and that ambiguities are surfaced for the user rather than resolved silently.

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 purpose before diving into ISO/plan mechanics, return contents, attachment encoding, show options and the follow-up call. It is dense and parenthetical-heavy, but nearly every clause carries information; only the trailing '[bulc-mcp rules] DRW-006' pointer reads as boilerplate.

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 output schema, the description correctly carries the return contract ('summary with candidateId, open ends ... runs and ambiguities'), and the re-analysis options are explained in context. The one gap is that no parameter is marked required, so the description should be explicit that a filePath or candidateId (or attachment) must be supplied.

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 already 89%, so the baseline is 3, but the description adds real meaning: the show modes are tied to what the agent will do with them ('lists details (ids, offset, limit, component)'), and it explains where candidateId comes from (earlier analysis or the chat attachment) and why it avoids re-reading. It still doesn't explain entry/rootHint/lineNoPattern beyond what the schema says.

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+resource ('Read a sprinkler / water-spray piping drawing ... recognise a candidate pipe network'), enumerates supported formats (.dxf, .dwg, .pdf, .zip, .png/.jpg) and both projection modes. The sprinkler-piping domain clearly separates it from the sibling arch_analyze_drawing and bulc_drawing_intake, and it names spr_import_network as the downstream consumer.

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?

Gives clear forward workflow ('Then call spr_import_network') and practical routing hints such as 'PDFs with outlined text set needsVision (read the page image instead)' and candidateId re-use 'without re-reading'. It never states when NOT to use it or how it differs from arch_analyze_drawing/bulc_drawing_intake, so explicit alternative selection is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_apply_to_fdsSpr apply to fdsA

Apply the hydraulic pipe-network sprinklers to the FDS model: for every sprinkler node (with a head and calc results from spr_run_calc), creates/replaces DEVC (SPRINKLER LINK TEMPERATURE) + PROP + PART entries using the calculated nozzle flow and pressure. Run spr_run_calc first. [bulc-mcp rules] DEVC-001, SPR-001, SPR-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), and the description adds real value: it discloses the exact objects created/replaced (DEVC/PROP/PART), the data source (calc results), and the prerequisite step. Minor tension: 'creates/replaces' reads as replace-style idempotent behavior while idempotentHint=false, but this is a subtle inference rather than a clear contradiction.

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 action and resource, followed by the concrete side effects and the prerequisite. The trailing '[bulc-mcp rules] ... bulc_knowledge_search' tag is slightly noisy but compact and actionable.

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?

For a zero-parameter, no-output-schema mutation tool this is nearly complete: it says what is modified, from what data, and the ordering prerequisite. It stops short of describing behavior when no sprinkler nodes/calc results exist, which slightly limits completeness.

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 schema baseline is 4. The description correctly implies the operation is driven entirely by existing sprinkler nodes and calc results rather than call arguments, so there is no parameter semantics to document.

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 and resource: 'Apply the hydraulic pipe-network sprinklers to the FDS model', then clarifies it creates/replaces DEVC (SPRINKLER LINK TEMPERATURE) + PROP + PART entries from calculated flow/pressure. This distinguishes it cleanly from siblings like add_sprinkler (manual sprinkler placement) and hvac_apply_to_fds.

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?

'Run spr_run_calc first' gives an explicit prerequisite and the data dependency is clear. It does not, however, name what to do instead if the network is not yet calculated or how it differs from manually adding devices, so there is clear context but no exclusions/alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_auto_layoutSpr auto layoutA

Automatically build a complete, calculable sprinkler pipe network in a rectangular area: a water source node (city water) at the (xMin, yMin) corner, a cross-main along x = xMin, one branch line per row, sprinkler nodes on a grid with heads, and every connecting pipe. Follow with spr_run_calc and spr_apply_to_fds to put the sprinklers into the FDS model. [bulc-mcp rules] SPR-001, SPR-002, SPR-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
zNoSprinkler height (m, default 2.8)
xMaxYesArea X max (m)
xMinYesArea X min (m)
yMaxYesArea Y max (m)
yMinYesArea Y min (m)
spacingXNoX spacing between sprinklers (m, default 3.0)
spacingYNoY spacing between sprinklers (m, default 3.0)
floorIndexNoStory id (draw_list_stories id). Default: the story that contains z

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly=false and idempotent=false, and the description substantiates this by describing the full created topology, so the agent knows a mutating build occurs. It stops short of warning that repeated calls will duplicate the network (a key consequence of non-idempotency) or how it interacts with existing sprinklers.

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 concrete build specification, followed by workflow guidance, then a compact rule reference. Efficient overall, though the '[bulc-mcp rules] SPR-001...' tag is cryptic without expansion.

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?

For a no-output-schema mutation tool, it adequately describes what is created and the downstream sequence. It omits edge-case behavior (existing networks, resultant node/pipe IDs the agent could reuse) but still gives enough to call it correctly.

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 100%, so all eight parameters are already documented with units and defaults. The description adds geometric context (corner placement of the water source, cross-main at x=xMin, spacing-driven grid) that maps to xMin/yMin/spacing parameters, but this is marginal above the baseline given the complete schema.

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 action (automatically build a sprinkler pipe network) and enumerates exactly what it constructs: water source at (xMin,yMin), cross-main along x=xMin, one branch line per row, grid sprinkler nodes with heads, and all connecting pipes. This clearly distinguishes it from granular siblings like spr_add_pipe or spr_add_node.

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?

Explicitly names the intended follow-up workflow (run spr_run_calc, then spr_apply_to_fds to push into FDS), which tells the agent its place in a pipeline. It does not, however, distinguish when to use this versus spr_import_network or building manually, so exclusions are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_design_reviewSpr design reviewA
Read-onlyIdempotent

Specification and design-error review of the sprinkler / water-spray network and its design results (deterministic). Checks: pipe pressure rating by standard (KS D 3507 1.2 MPa NFTC 103, SGP, B31.1 wall formula, CuNi/GRE ratings), valve / flange class (JIS 5K/10K/16K/20K, PN, ASME class from valve std/tag), velocities vs limits, nozzles below required / above max pressure, imbalance, drains, closed valves isolating nozzles, disconnected / orphan / dead-end / coincident nodes, zero-length or duplicate pipes, expansion against flow, tee imbalance, high-loss valves, standards / sizes / C / K / required pressure data, zones and zone valves, stories and risers, pump curve NFPA 20 and run-out. Each finding: severity, category, location, message, suggested fix, ids. [bulc-mcp rules] SPR-001, SPR-002, SPR-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoList only this finding code (see byCode)
limitNoFindings to list (default: all when ≤ 100, else 40). byCode always summarises every code
offsetNoSkip this many listed findings (paging)
categoryNospec = 사양 검토, design = 설계 오류 검토 (default all)
languageNoText language (default ko)
severityNoList only this severity (e.g. warning — errors no longer fill the list)
minSeverityNoLowest severity to list (default info)
velocityFailNom/s (default design basis)
velocityWarnNom/s (default design basis)
defaultFlangeClassNoClass for valves / flanges without a marking
corrosionAllowanceMmNoWall corrosion allowance mm (default carbon steel 1.0)
maxNozzlePressureMPaNoNozzle max working pressure (default 1.2 MPa)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, closed-world, non-destructive behaviour, so the safety profile is covered. The description adds genuinely new behavior: the review is deterministic, it runs a specific catalog of hydraulic/spec checks, and each finding carries severity, category, location, message, suggested fix, and ids — useful since there is no output schema.

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?

Purpose and the notion of a deterministic review are front-loaded in the first sentence, and the long check list is relevant content rather than padding. The run-on comma list is dense and could be grouped, but almost every item earns its place by telling the agent what the review covers.

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?

For a complex 12-parameter, no-output-schema tool, the description covers what is reviewed and the shape of each finding, which compensates for the missing output schema. The main gap is the absence of explicit when-to-use routing against sibling verification/calculation tools, but the operational picture is otherwise complete.

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 100% and all 12 parameters (code, limit, offset, category, language, severity, minSeverity, velocityFail, velocityWarn, defaultFlangeClass, corrosionAllowanceMm, maxNozzlePressureMPa) are documented in the schema itself. The description adds threshold context (standards, pressures, classes) but no per-parameter meaning beyond the schema, so the baseline 3 applies.

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 and resource ('Specification and design-error review of the sprinkler / water-spray network and its design results') and enumerates exactly what is checked. An agent can distinguish this from calculation tools like spr_run_calc or generic validators like validate_project without opening a schema.

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?

The word 'deterministic' and the enumeration of checks imply this is a post-design audit pass, and the trailing '[bulc-mcp rules]' note routes rule-id lookups to bulc_knowledge_search. However, there is no explicit when-to-use or when-not-to-use guidance relative to siblings like spr_list_summary, spr_get_results, or validate_project, leaving usage to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_export_resultsSpr export resultsA

Write the sprinkler / water-spray design results to files: format csv = 5 tables (summary, zones, lines by line number, nozzles, pipes; UTF-8 BOM), fhc = FHC (Canute) calculation-sheet style CSVs (report, heads, pipes, summary, lines, NFPA worksheet, node map), both. scenario = "all" | "zone:" (default governing scenario), at = supply (actual source) | design (inverse design point). zip=true also writes one zip per format. language = header language (ko default). Uses the current design results or recalculates them. fhcDraft=true adds the FHC project-file draft (.FHC) and pipe data table draft (.PDT) to the FHC files (check them in FHC before use). The FHC files include _bulc_model.csv, which spr_import_fhc_bundle reads back exactly. [bulc-mcp] Writes files on this PC at the path you give. [bulc-mcp rules] SPR-001, SPR-002, SPR-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
atNosupply (default) or design point
zipNoAlso write a zip per format
formatNoDefault both
fhcDraftNofhc / both: also write the .FHC project draft + .PDT draft (default false)
languageNoHeader language (default ko)
scenarioNo'all' or 'zone:<zone>' (default: governing scenario of the design)
outputDirYesFolder to write into (created if missing)
slopeModeNo.FHC draft sloping pipes: horizontal (default — length field = horizontal length), split (horizontal + U/D records), pipe (pipe length)
projectNameNoFile name prefix (default CHID)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as a non-read-only, non-idempotent write, and the description adds real context beyond them: files are written to the local path, csv uses UTF-8 BOM, zip creates one archive per format, fhcDraft adds .FHC/.PDT drafts needing external verification, and recalc-vs-reuse behavior. The round-trip contract with spr_import_fhc_bundle is an extra disclosure the annotations cannot carry.

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 dense paragraph that front-loads the primary action (write results to files) before the option breakdown. The volume of format detail is justified by a 9-parameter, multi-artifact tool, though the run-on structure is slightly heavy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, no-output-schema file-writing tool, the description specifies formats, defaults, recalculation behavior, the FHC draft caveat, and the import round-trip. Nothing an agent needs to invoke it correctly appears missing.

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 coverage is 100%, so the baseline is 3, but the description adds substantial meaning: what each format value actually emits (csv = 5 tables, fhc = 7 CSV sets, both), the scenario syntax 'all' | 'zone:<zone>', and supply-vs-design semantics. projectName (CHID default) and slopeMode are left to the schema, slightly limiting the add.

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 and resource ('Write the sprinkler / water-spray design results to files') and enumerates the exact artifacts per format, so the agent knows precisely what is produced. It is clearly distinguishable from spr_get_results (in-memory retrieval) and spr_import_fhc_bundle (the read-back counterpart, which it names).

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?

Gives defaults and conditions for the key switches (scenario default = governing scenario, at default = supply, format default = both) and notes it uses current results or recalculates. It also flags the FHC round-trip via spr_import_fhc_bundle, but does not explicitly state when to prefer this over spr_get_results or other result tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_get_resultsSpr get resultsA
Read-onlyIdempotent

Get sprinkler / water-spray results (run spr_run_calc first). With a design calculation: operation (all open / zone deluge), per scenario the actual-source flow and minimum margin, the REQUIRED SOURCE PRESSURE (inverse: every nozzle reaches its own required pressure), design flow, governing nozzle, pump check, warnings. detail = lines (table by line number) | zones | nozzles | pipes for one scenario (default governing) at supply or design point. Also the classic totals (total flow, source pressure, velocity / flow ranges, fitting losses). [bulc-mcp rules] SPR-001, SPR-002, SPR-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoTable at the actual source (default) or at the inverse design point
limitNoTable rows (default 40)
detailNoAdd a result table
scenarioNo'all' or 'zone:<zone>' (default: governing scenario)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds genuinely useful behavior beyond that: the calculation dependency, what the inverse 'REQUIRED SOURCE PRESSURE' means, defaults (40 rows, governing scenario), and the breadth of returned diagnostics (flow, margin, governing nozzle, pump check, warnings). It does not mention error behavior when no calc exists, which keeps it at 4 rather than 5.

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?

Purpose and prerequisite are front-loaded in the first clause, and the following clauses enumerate return content that would otherwise be undocumented (there is no output schema), so the length is largely earned. The heavy run-on comma/pipe stacking ('detail = lines (table by line number) | zones | nozzles | pipes...') is dense and slightly hard to parse, and the trailing bulc-rules pointer is boilerplate.

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?

For a complex design-results tool with no output schema and four optional parameters, the description carries the return-value burden well: it names the scenarios, the two evaluation points, the per-scenario metrics, and the classic totals. Only the precise shape/nesting of the returned tables and failure behavior when the calc has not been run are left unstated.

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 100%, so the baseline is 3, but the description adds meaning the schema lacks — it explains that 'lines' is a table by line number, that the detail table is for one scenario (default governing) at supply or design point, and that scenario accepts 'all' or 'zone:<zone>'. This is real semantic enrichment beyond the enum values themselves.

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 ('Get sprinkler / water-spray results') and immediately names the prerequisite 'run spr_run_calc first', which separates it from the many spr_* setup/mutation siblings. It does not explicitly distinguish itself from close read-side siblings like spr_list_summary or spr_export_results, so it falls just short of 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(run spr_run_calc first)' gives the one essential precondition, and the detail/scenario/at parameters imply post-calculation inspection contexts. However, it never says when to choose this over spr_list_summary (summary view) or spr_export_results (persisting results), leaving the selection guidance to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_import_fhc_bundleSpr import fhc bundleA
Destructive

Load a BULC "FHC-style" export bundle back (zip, folder of CSVs, or *_bulc_model.csv). mode check (default) changes nothing: compares the bundle network and settings field by field with the CURRENT network, recalculates the bundle network and compares with the results written in the file (nozzle flows / pressures, required source pressure, summary). mode apply replaces the current pipe network with the bundle (undo history cleared, like opening a file) and runs the design calculation. Older bundles without bulc_model can only be partly restored (allowPartial). This is NOT an importer for files saved by the FHC (Canute) program. [bulc-mcp rules] SPR-001, SPR-002, SPR-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNocheck (default, read-only) | apply (replace the network)
recalcNoapply: run the design calculation after loading (default true)
filePathYeszip / folder / *_bulc_model.csv path
allowPartialNoapply: also load an older bundle without bulc_model (partial network)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description reinforces this concretely: apply "replaces the current pipe network with the bundle (undo history cleared, like opening a file)" and runs the design calculation. It also adds non-annotation context — check mode's field-by-field comparison, recalc default true, and the allowPartial limitation for older bundles — which is exactly the behavioral detail the agent 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?

Purpose and the two modes are front-loaded, then the destructive consequence and the format exclusion follow. It is information-dense with little filler, though the trailing rule-reference bracket is slightly out of place for an agent-facing definition.

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 output schema, the description carries the return burden; it explains what check compares (network settings, recalculated results, required source pressure, summary) but does not characterize the returned comparison output verbatim. For a destructive import tool with full annotation coverage, this is nearly complete.

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 coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: check is read-only and the default, apply replaces the network, recalc runs the design calc after loading, and allowPartial enables partial restore of bundles lacking bulc_model. This extends the schema rather than restating it.

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?

The description names a specific verb and resource — loading a BULC "FHC-style" export bundle — and pins the accepted formats (zip, folder of CSVs, *_bulc_model.csv). It also explicitly excludes the FHC (Canute) program importer, which prevents confusion with a differently-scoped importer.

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?

It gives explicit mode-level guidance: check (default) changes nothing and compares, apply replaces the network. The negative scoping (not the FHC/Canute importer) also acts as a when-not. It stops short of routing the agent against the closest sibling (spr_import_network), so it is strong but not fully sibling-differentiated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_import_networkSpr import networkA
Destructive

Create the recognised (or a hand-written) pipe network in the sprinkler module in ONE undo step: nodes, pipes (nominal size, pipe standard, C, line number, valves), nozzles (kind closed|open|drain, K, required pressure, zone, line), drains and the water source. From a drawing: candidateId (+ components, excludeSegments/Nodes/Lines/Runs, source, defaults, drains, nozzleOverrides, zoneByLine/Run/Component, valves, placement). Hand-written: network = {version:1, units:"m", nodes:[{ref,x,y,z}], pipes:[{from,to,diameter,lineNo}], heads:[{node,kind,kFactor,requiredPressure,zone}], sources:[{node,sourceType,…}]}. Water-spray ISO nozzles default to open K80 (project default: general K80, zone deluge — confirm with the user). Validates first (nothing changes on error); dryRun only reports. scriptPath saves the payload JSON (re-import later). mode append (default) | replace. Then spr_run_calc. [bulc-mcp] mode='replace' replaces the current pipe network; call with dryRun=true first (DRW-009).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoappend (default) adds to the current network; replace swaps it (design settings stay)
drainsNoCandidate nodes (open ends) that are drain holes — K or orifice diameter (default = nozzle K: drain hole = sprinkler orifice)
dryRunNoOnly validate and report counts, change nothing
sourceNoWater source at candidate node (default = recognised inlet): sourceType pump|city_water|gravity_tank|pressure_tank, staticPressure, residualPressure, residualFlow, pumpRatedFlow, pumpRatedHead, pumpShutoffHead (MPa / L/min), tankElevation
valvesNoValves on candidate segments: type, tag (WS-11U), zone (zone valve), open=false (closed)
networkNoHand-written import payload (SprImportPayload) instead of candidateId
defaultsNokFactor (default 80), nozzleKind (default open for water spray), requiredPressure MPa, material (pipe standard id, e.g. JIS_G3454_STPG_SCH40), cFactor, stemDiameter (25), fallbackDiameter (50)
placementNoPlace the drawing network: x,y,z offset of the inlet (m), rotateDeg about Z, mirrorY, floorIndex (story id; default by z)
zoneByRunNo{ "<run name>": "<zone>" }
componentsNoConnected components to import (default [0] = main network with the inlet)
scriptPathNoAlso save the import payload JSON to this path ("script" — can be re-imported with network=…)
zoneByLineNo{ "<lineNo>": "<zone>" } — nozzles on that line get the zone (zone deluge scenarios)
candidateIdNoFrom spr_analyze_drawing / chat attachment
excludeRunsNoRun names to drop (R05_Y_z1.7m …)
excludeLinesNoLine numbers to drop
excludeNodesNo
excludeSegmentsNoCandidate segment ids to drop (drain / air-blow / reference lines …)
nozzleOverridesNo
zoneByComponentNo{ "<component id>": "<zone>" }

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even with annotations declaring destructive/non-idempotent, the description adds real beyond-annotation behavior: the whole import is a single undo step, it validates before mutating ('nothing changes on error'), dryRun only reports, replace wipes the current network while design settings stay, and scriptPath persists the payload for re-import.

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 action and no filler sentences, but the body is a dense, unstructured run of parenthetical enumerations and inline JSON that is harder to parse than a segmented form would be.

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?

For a 19-parameter, 0-required, deeply nested tool with no output schema, it covers modes, validation/dry-run semantics, defaults, and the next step well. It stops short of describing what a success response reports (counts) and how append vs replace interact with existing valves/heads beyond the schema's 'design settings stay' note.

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 already 89%, so the baseline is 3, but the description adds meaning the schema lacks: the concrete hand-written payload shape for the opaque 'network' object and the domain default (water-spray ISO nozzles default open K80, zone deluge, confirm with user).

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 and resource (create the pipe network) and enumerates exactly what is created: nodes, pipes, nozzles, drains, water source. The 'in ONE undo step' and 'recognised (or hand-written)' framing distinguishes it from the granular sibling tools like spr_add_node/spr_add_pipe and from spr_analyze_drawing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly branches the two supported entry paths ('From a drawing: candidateId ... Hand-written: network = {...}'), names the upstream tool (spr_analyze_drawing) and the follow-up (spr_run_calc), and adds a hard rule for the dangerous path: 'mode=replace ... call with dryRun=true first (DRW-009)'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_insert_fittingSpr insert fittingA

Insert a fitting into an existing pipe. elbow90 / elbow90_long / elbow45: bend the pipe into an L shape through a new intermediate corner node (route l_x = go along X first, l_y = Y first; elbow45 makes the last leg a 45° diagonal). tee / cross / wye / reducer: split the pipe at position with a new junction node carrying that fitting (then draw branch pipes from it with spr_add_pipe). The new node id is in spr_list_summary. [bulc-mcp rules] EVAC-001, SPR-002, SPR-007 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
routeNoL-bend route for elbow90/elbow90_long (default l_x)
pipeIdYesPipe ID
fittingYesFitting to insert (junction = plain split, fitting detected automatically)
positionNoSplit position along the pipe from its start node, 0..1 (default 0.5; tee/cross/wye/reducer/junction)
downstream_diameterNoreducer only: nominal diameter (mm) of the pipe on the END-node side after the reducer

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a non-read-only, non-destructive, non-idempotent, closed-world mutation, so the description only needs to add context — and it does: a new intermediate/junction node is created, the pipe is split at a normalized position, and the resulting node id must be retrieved from spr_list_summary. It does not say whether the original pipe object is replaced or segmented, which is the one remaining behavioral gap for a topology-mutating tool.

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?

Dense but well front-loaded: the core action comes first, then a per-fitting-family breakdown, then the node-id retrieval hint. The trailing bracketed rule reference is a bit tacked-on but carries actionable routing information (bulc_knowledge_search).

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?

No output schema exists, so the description compensates by telling the agent where the new node id surfaces (spr_list_summary). Combined with 100% schema coverage and explicit annotations, an agent has enough to invoke it correctly; only failure modes (invalid pipeId, off-range position) are unaddressed.

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 100%, so baseline is 3, but the description adds real meaning beyond the schema: it disambiguates l_x/l_y ('go along X first' vs 'Y first'), explains that elbow45 turns the last leg into a 45° diagonal, and scopes which fitting values consume `position`. downstream_diameter semantics remain entirely schema-supplied.

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+resource ('Insert a fitting into an existing pipe') and then decomposes the operation by fitting family, so an agent knows exactly what each enum value produces (L-bend corner node vs. split junction node). This distinguishes it from spr_add_pipe, which is named as the complement rather than a competitor.

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?

Clear context: which fitting values route through a new intermediate corner node versus splitting at `position`, and it explicitly hands off to spr_add_pipe for drawing branch pipes. It also explains the junction special case (plain split, fitting auto-detected). It stops short of stating when NOT to use this tool or naming an alternative for removing/undoing a fitting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_list_summarySpr list summaryA
Read-onlyIdempotent

Get the sprinkler status (read-only): pipe network nodes / pipes / fittings / risers with ids, sprinkler heads with their spray profile and override count, the spray profile library with usage. include_presets lists spray presets (standard, quick response, ESFR, residential, water mist low/intermediate/high pressure); profile_id returns one profile with every FDS key and the heads using it. [bulc-mcp rules] EVAC-001, SPR-001, SPR-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idNoShow this spray profile in full (FDS keys, usage)
include_presetsNoAlso list the spray presets (keys for spr_upsert_spray_profile.preset)

TDQS

A4.1/5.0
Behavior4/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 real behavioral content: the exact facets returned (override counts, spray profile library with usage, full FDS keys for a selected profile) and a cross-reference to SPR-001/SPR-002 rules. No output schema exists, and the return contents are disclosed well, though pagination/size behavior is unaddressed.

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?

Two dense sentences front-load the core purpose and return content, with parameter behavior following. The trailing bulc rules line is useful but reads as an appended annotation rather than integrated guidance, costing a little on structure.

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 output schema, the description must carry return-value meaning, and it does — describing each returned entity and the two parameter-driven modes. An agent can call this correctly and anticipate the payload; only output volume/limit behavior is left unspecified.

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 coverage is 100%, so both parameters are already documented. The description goes beyond that by enumerating the preset set reachable via include_presets and clarifying that profile_id returns a single profile with every FDS key plus the heads using it, adding meaning the schema wording alone does not supply.

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 and resource — 'Get the sprinkler status' — and enumerates exactly what the read returns (nodes/pipes/fittings/risers, heads with spray profile, the profile library). This separates it clearly from mutating spr_* siblings and from spr_get_results, which returns simulation output rather than network status.

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 two modes ('include_presets lists...', 'profile_id returns one profile...'), and 'read-only' signals a safe inspection call. But no explicit when-to-use, when-not, or named alternatives (e.g. spr_get_results, hvac_list_summary) are given, so guidance stays inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_pump_sizingSpr pump sizingA
Read-onlyIdempotent

Pump specification for the sprinkler / water-spray network (deterministic). mode from_design (default): from the design calculation (per deluge zone or all-open) → rated flow and pressure with a safety margin, the points the pump curve must pass, NFPA 20 checks (churn ≤ 140 %, ≥ 65 % at 150 % flow), NFPA 20 standard capacity, hydraulic / shaft power and motor kW, NPSHa, pump type, governing zone and nozzle, governing-path losses and re-solved what-if hints (nozzle K −10 %, upsizing the bottleneck, closing drains, valve loss). mode target: a target flow and/or pressure at the source node. mode check_curve: check the network pump curve or a given curve. apply=true writes the proposed curve to the water source (then spr_run_calc). [bulc-mcp rules] SPR-001, SPR-003, SPR-030 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoDefault from_design
applyNoWrite the proposed pump curve to the water source (one source)
curveNocheck_curve: curve points [{flow L/min, pressure MPa}] (default: the network pump source)
fluidNoSea water 1,025 kg/m³ for static heads (marine)
whatIfNoRe-solve what-if hints (default true)
churnMPaNocheck_curve: churn (shut-off) pressure
languageNoText language (default ko)
pumpPipeNoPump → source-node pipe {lengthM, diameterMm, material?, cFactor?, equivLengthM?}
scenarioNotarget: 'all' or 'zone:<zone>' (default governing)
strategyNoRated pressure: curve = cover all zone points with the assumed curve (default), envelope = max flow × max pressure
staticLiftMNoHeight of the network source node above the pump centreline, m (+ = pump below)
ratedFlowLpmNocheck_curve: rated flow
suctionHeadMNoStatic suction head m (+ flooded, − lift)
at150RatioPctNoAssumed curve pressure at 150 % flow, % of rated (default 70)
churnRatioPctNoAssumed curve churn % of rated (default 120)
efficiencyPctNoPump efficiency % (default estimated by size)
flowMarginPctNoFlow margin % (default 0)
targetFlowLpmNotarget: flow L/min
suctionLossMPaNoSuction loss MPa
pumpPipeLossMPaNoExtra pump → source-node loss at the max design flow, MPa
ratedPressureMPaNocheck_curve: rated pressure
pressureMarginPctNoPressure safety margin % (default 10)
targetPressureMPaNotarget: pressure at the network source node, MPa

TDQS

A3.5/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare readOnlyHint=true and idempotentHint=true, but the description explicitly states 'apply=true writes the proposed curve to the water source'. An agent trusting the annotation would not expect a state-mutating mode, so the description contradicts the declared safety profile. The description is otherwise unusually rich (deterministic, NFPA 20 churn/150 % checks, NPSHa, rule references), but the read-only mismatch is a genuine hazard.

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 purpose, then modes, then the apply/chaining caveat, and it ends with rule IDs. It is dense and the first sentence is very long, but given the absence of an output schema the enumeration of computed outputs is load-bearing rather than filler.

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?

For a 23-parameter computational tool with no output schema, the description usefully enumerates what comes back (rated flow/pressure, NFPA 20 checks, power, NPSHa, governing zone/nozzle, what-if hints) and explains the three modes. The main gap is that the conditional write path is not reconciled with the declared read-only annotation.

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 100% and 23 parameters are documented in the schema, so the baseline is 3. The description reinforces the semantics of mode and apply and ties them to behaviour, but adds no syntax or format detail beyond what the schema already supplies.

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 and resource ('Pump specification for the sprinkler / water-spray network') and then enumerates the three modes, so an agent knows exactly which capability it is invoking. It is clearly distinguishable from data-editing siblings like spr_add_water_source, spr_update_water_source and the downstream spr_run_calc.

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?

Explicit per-mode routing: from_design is the default, target is for a required flow/pressure at the source node, check_curve is for validating a curve, and 'apply=true ... (then spr_run_calc)' gives sequencing. It does not, however, state when to prefer this tool over neighbouring analysis tools such as spr_design_review or spr_list_summary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_remove_nodeSpr remove nodeA
Destructive

Remove a pipe node (also removes connected pipes and heads) [bulc-mcp rules] EVAC-001, SPR-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNode ID to remove

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered structurally. The description adds valuable non-obvious context by disclosing that removing a node cascades to connected pipes and heads, which annotations do not specify. It still omits details like reversibility/undo behavior, but the cascade disclosure is meaningful added value.

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 core action and its cascade consequence are front-loaded in one efficient sentence. The trailing rule-reference line ("[bulc-mcp rules] EVAC-001, SPR-002 — bulc_knowledge_search ...") is terse but somewhat cryptic, though it is not bloated.

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?

For a single-parameter delete tool with rich annotations (destructive, non-idempotent) and no output schema, the description covers the action, the resource, and the critical side effect of cascade removal. It omits error behavior (e.g., missing node) and undo guidance, but those are minor gaps against the structured coverage already present.

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 100% and the single id parameter is already documented as "Node ID to remove." The description adds no format, source, or lookup guidance beyond what the schema provides, so the baseline of 3 applies when the schema does the heavy lifting.

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 verb and resource ("Remove a pipe node") and the parenthetical clarifies its scope by noting that connected pipes and heads are also removed, which implicitly separates it from siblings like spr_remove_pipe and spr_remove_sprinkler_head. It does not explicitly name alternative tools, so it falls short of the top tier.

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?

No when-to-use guidance is given: the description never states the conditions under which a node should be removed versus using spr_remove_pipe or spr_remove_sprinkler_head, nor does it mention prerequisites or alternatives. The cascade note is a side-effect disclosure rather than usage guidance, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_remove_pipeSpr remove pipeC
Destructive

Remove a pipe connection by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPipe ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, covering the safety profile. The description adds nothing beyond the ID reference — no mention of whether connected nodes are affected, whether the removal cascades, or auth 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?

One short, front-loaded sentence with zero waste. Efficient, though almost too terse to carry much meaning.

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?

For a simple one-param destructive tool whose annotations already flag destructiveness and no output schema exists, the definition is minimally adequate. It omits any note on what happens to dependent network elements on removal.

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 100% and the single 'id' parameter is already documented in the schema. The description's 'by ID' merely restates the schema, so the baseline 3 applies.

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 clear verb+resource: remove a pipe connection by ID. An agent can distinguish it from spr_add_pipe and spr_update_pipe by the verb, though the description doesn't explicitly name those siblings.

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?

No when-to-use guidance or alternatives are provided. The destructive nature of the operation is only conveyed by annotations, not the description, so there's no routing logic or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_remove_sprinkler_headSpr remove sprinkler headB
Destructive

Remove a sprinkler head by ID [bulc-mcp rules] SPR-010, SPR-011 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSprinkler head ID to remove

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered structurally. The description adds only a cryptic rule reference and says nothing about cascading effects on connected pipes/nodes or irreversibility — useful additions but not required given 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?

Two short lines with the action stated first and no filler. The rule-reference line is terse but its meaning is opaque without external context, which slightly detracts from structure.

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?

For a single-parameter destructive tool with no output schema this is minimally adequate: action, key, and a compliance pointer are present. It omits what happens to dependent sprinkler network elements on removal, which an agent invoking a destructive delete would benefit from knowing.

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?

One parameter at 100% schema description coverage, so the schema already documents 'id'. The description's 'by ID' restates rather than enriches that, making the baseline 3 correct.

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?

Clear specific verb+resource: 'Remove a sprinkler head by ID'. An agent can distinguish it from spr_add_sprinkler_head and spr_update_sprinkler_head by the verb alone, though it doesn't explicitly contrast itself with the sibling removal tools (spr_remove_node, spr_remove_pipe).

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?

The embedded '[bulc-mcp rules] SPR-010, SPR-011 — bulc_knowledge_search "<id>"' note hints that a rules lookup is expected before removal, which is implied usage guidance, but there is no statement of when to use this versus other removal tools or any stated prerequisites in prose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_remove_water_sourceSpr remove water sourceC
Destructive

Remove a water source by ID [bulc-mcp rules] SPR-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWater source ID to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, and openWorldHint=false. The description adds no further behavioral context such as cascading effects, required permissions, or reversibility beyond 'remove by ID'. With annotations covering the safety profile, this lack of added context warrants a 2.

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 core sentence is concise and front-loaded, but the appended '[bulc-mcp rules] SPR-001 — bulc_knowledge_search "<id>"' line is cryptic and may not earn its place for tool selection. Still, overall length is minimal. Score 4.

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?

For a destructive removal tool with rich annotations and a fully specified single parameter, the description is minimally adequate. It omits any indication of side effects, such as whether dependent pipes or nodes are also removed, which an agent may need. Score 3.

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 coverage is 100% and the single id parameter is fully described as 'Water source ID to remove'. The description's 'by ID' adds no new syntax or format detail beyond the schema. Baseline 3.

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 ('Remove a water source by ID'), making the action clear. However, it does not distinguish this from sibling removal tools like spr_remove_pipe or spr_remove_node, so sibling differentiation is absent. Score 4.

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?

No guidance is provided about when to use this tool versus alternatives, nor any prerequisites or conditions. The cryptic '[bulc-mcp rules]' line does not convey usage context for selecting the tool. Score 2.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_run_calcSpr run calcA

Run the hydraulic calculation. mode design (default) = scenarios "all" and one per deluge zone, each at the actual water source AND the inverse REQUIRED SOURCE PRESSURE (minimum source pressure so every participating nozzle reaches its own required pressure; drains always open; closed valves exclude pipes) with the governing nozzle and a pump check. mode calc = the classic single forward calculation. Read the results with spr_get_results (next round) — detail lines gives the table by line number. [bulc-mcp rules] SPR-001, SPR-002, SPR-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNodesign (default) | calc
zonesNodesign: only these zones
inverseNodesign: solve the required source pressure (default true)
scenariosNodesign: which scenarios (default both = 'all' + every zone)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnly=false/idempotent=false, so the description carries the behavioral load and does so richly: scenario enumeration, solving inverse required source pressure, drains always open, closed valves excluding pipes, governing nozzle and pump check. It does not mention permissions or side effects on stored data, so not a 5, but it far exceeds the annotation baseline.

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 action and organized as mode design = ... / mode calc = ... with a trailing rule-lookup pointer. The middle sentence is a deeply nested run-on that is hard to parse, but nearly every clause carries real information.

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 output schema, the description compensates by telling the agent where results live (spr_get_results, detail lines by line number) and what the run produces (governing nozzle, pump check). Adequate for calling the tool correctly; only permissions/state-change disclosure is missing.

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 coverage is 100% (baseline 3), and the description adds genuine meaning on top: it defines mode design vs calc, explains inverse as 'required source pressure' with a parenthetical definition, and clarifies scenarios as 'all' plus one per zone. This goes beyond the terse schema descriptions.

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 and resource ('Run the hydraulic calculation') and clearly differentiates its two operating modes (design vs calc). It also distinguishes itself from siblings by routing result-reading to spr_get_results, so an agent can tell it apart from spr_pump_sizing/spr_design_review without opening a schema.

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?

Explains what each mode produces and which is default, and names spr_get_results as the follow-up tool with the 'next round' timing caveat. It gives clear context for choosing a mode, but offers no explicit when-not or exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_set_defaultsSpr set defaultsA
Idempotent

Set default pipe diameter, pipe standard and K-factor for new pipes/heads, the project default spray profile, the hydraulic minor-loss options (fittings/valves by NFPA 13 equivalent length, large-size 250-600 mm table), and the DESIGN BASIS: default required pressure per nozzle kind (requiredPressureClosed / requiredPressureOpen, MPa), operation (auto = zone deluge when zones exist / all_open / zone_deluge), includeClosedHeads (false = only open nozzles and drains discharge), drainCd, velocity warning / fail limits. [bulc-mcp rules] SPR-001, SPR-002, SPR-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
drainCdNoDrain orifice discharge coefficient (0.62)
drawRouteNoGUI pipe drawing route: straight, or L-shape with an automatic elbow node (X first / Y first)
operationNoDesign operation
velocityFailNoVelocity fail limit (m/s, 10)
velocityWarnNoVelocity warning limit (m/s, 6)
defaultKFactorNoDefault K-factor (new nozzles and drains — drain hole = sprinkler orifice)
largeSizeTableNoUse the 250-600 mm fitting equivalent-length table (new projects on)
taperedReducerNoTreat reducers as tapered (loss 0, NFPA 13 rule 10) instead of reducing couplings/bushings (default false)
defaultDiameterNoDefault diameter (mm)
defaultMaterialNoDefault pipe standard for new pipes
includeClosedHeadsNoClosed sprinklers discharge in the calculation (default true)
includeMinorLossesNoInclude fitting and valve losses in the hydraulic calculation (default true)
conservativeRunLossNoAdd the conservative Korean-textbook straight-run loss for tees/crosses/wyes (default false = NFPA 13 run loss 0)
requiredPressureOpenNoDefault required pressure of open nozzles [MPa] (0.1)
defaultSprayProfileIdNoProject default spray profile — new heads and heads without an explicit profile follow it
requiredPressureClosedNoDefault required pressure of closed sprinklers [MPa] (0.1)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations establish write/idempotent/non-destructive, and the description adds genuinely useful scope semantics: defaults apply only to new objects and to 'heads without an explicit profile', so it will not retroactively overwrite existing configuration. It also clarifies cross-parameter behavior ('auto = zone deluge when zones exist', 'false = only open nozzles and drains discharge'). It stops short of stating auth requirements or exactly which existing values, if any, get overridden.

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?

The content volume is defensible for a 16-parameter tool, and the primary purpose is front-loaded. But it is delivered as a single sprawling sentence punctuated by semicolons and embedded parentheticals, which makes it hard to scan and separates related concepts (hydraulics vs. design basis) less clearly than short grouped sentences would.

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 16 optional parameters, no output schema, and annotations covering the safety profile, the description does cover every parameter group and the scoping behavior an agent needs to call it correctly. The remaining gap is that it never states the effect of supplying no arguments at all (all defaults are optional, so calling with an empty object is ambiguous).

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 coverage is 100%, so the baseline is 3; the description earns an extra point by adding interpretation the schema lacks, notably that operation='auto' becomes zone deluge when zones exist, that includeClosedHeads=false means only open nozzles and drains discharge, and that drainCd/K-factor tie the drain hole to the sprinkler orifice. This clarifies interactions between parameters rather than just restating field labels.

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?

The description opens with a specific verb ('Set') and enumerates exactly which defaults are being configured: pipe diameter/standard/K-factor, spray profile, minor-loss options, and the design basis (required pressures, operation mode, velocity limits). Critically it scopes these to 'new pipes/heads' and 'new projects', which distinguishes it from mutation tools like spr_set_pipes or spr_update_pipe that alter existing objects.

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 context is implied rather than stated: 'for new pipes/heads' and '(new projects on)' signal this is a pre-design configuration step, and the '[bulc-mcp rules] SPR-001...' pointer tells the agent to consult knowledge search. However there is no explicit when-to-use/when-not statement and no sibling tool is named as the alternative for updating existing pipes or heads.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_set_head_spraySpr set head sprayA
Idempotent

Set per-head spray settings on one or many sprinkler heads — pipe-network heads, obstacle sprinklers and DEVC sprinklers alike (the GUI spray dialog "this head only" path). Pick heads with all / group (interlock or deluge group) / network_of_node / head_ids / node_ids / obstacle_ids / device_ids. profile_id links them to a shared profile (pipe heads take its K, activation temperature and RTI unless keep_head_values). prop / part override single FDS keys for these heads only; inherit lists keys to hand back to the profile (prop/part keys or orientation, rotation, pipe_index, activation); reset drops every override. orientation / rotation / pipe_index / activation are DEVC values. head_type applies to pipe heads (upright still sprays down). All heads are checked first; if any would be an FDS error nothing changes. Pipe heads whose K changed need spr_run_calc then spr_apply_to_fds. [bulc-mcp rules] DEVC-001, SPR-010, SPR-011 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoevery sprinkler head in the project (pipe network, obstacle and DEVC sprinklers)
partNoPer-head &PART droplet overrides — same keys and units as spr_upsert_spray_profile.part
propNoPer-head &PROP overrides — same keys and units as spr_upsert_spray_profile.prop
groupNosprinkler interlock/deluge group id or name — all its members
resetNoDrop every per-head spray override first (pipe heads: K / activation / RTI back to the profile)
inheritNoKeys to remove from the heads so they follow the profile again
head_idsNopipe-network head ids (spr_list_summary)
node_idsNopipe-network sprinkler node ids (all heads on them)
rotationNoDEVC ROTATION (deg)
head_typeNoPipe-network head type
activationNoHow the head opens: link (heat, default), time (DEVC TIME + SETPOINT), ctrl (CTRL_ID), initial (open at t=0).
device_idsNoDEVC sprinklers (add_sprinkler / list_devices)
pipe_indexNoDEVC PIPE_INDEX (pipe network number for PRESSURE_RAMP / OPEN NOZZLES)
profile_idNoLink the heads to this spray profile
orientationNoDEVC ORIENTATION spray axis (default [0,0,-1]; sidewall e.g. [1,0,0])
obstacle_idsNoobstacle sprinklers (list_obstacles)
network_of_nodeNopipe node id — every head in the pipe network connected to it
keep_head_valuesNoWith profile_id: pipe heads keep their own K / activation temperature / RTI

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: all-or-nothing validation ('All heads are checked first; if any would be an FDS error nothing changes'), the exact semantics of reset/inherit/keep_head_values, and the fact that pipe heads whose K changed require spr_run_calc plus spr_apply_to_fds. These are real operational constraints not derivable from idempotentHint/destructiveHint.

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 purpose, then selection, then semantics, then the downstream-step caveat; every sentence carries information about an 18-parameter tool. It is dense with semicolon-chained clauses, which slightly taxes scanning but avoids padding.

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?

For an 18-param mutation tool with nested objects and no output schema, it covers selection semantics, atomic validation, override/inheritance behavior, and follow-up calc. It omits any indication of what is returned or error reporting, a minor gap given no output schema exists to carry that.

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 coverage is already 100%, so baseline is 3, but the description meaningfully enriches it: profile_id inheritance rules, how prop/part override single FDS keys, what inherit hands back, and the pipe-head-vs-DEVC split for head_type/orientation/rotation/pipe_index/activation. A few params (rotation, orientation) get only restated schema-level meaning, keeping it below 5.

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 and resource ('Set per-head spray settings on one or many sprinkler heads') and enumerates the three head families it operates on (pipe-network, obstacle, DEVC). It names the GUI analog and downstream siblings, so an agent can place it precisely without opening schemas.

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?

Explains how to select heads via all/group/network_of_node/head_ids/node_ids/obstacle_ids/device_ids, which is effectively when-to-use guidance for each param. It also names the follow-up pipeline (spr_run_calc then spr_apply_to_fds when K changes) and cites rule ids. It stops short of explicitly excluding sibling tools like spr_update_sprinkler_head.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_set_nozzlesSpr set nozzlesA
Idempotent

Set nozzle data on many pipe-network nozzles at once — choose them with all / headIds / nodeIds / zone / lineNo / kind (filters combine). Sets kind (closed sprinkler | open nozzle | drain), K, the REQUIRED DISCHARGE PRESSURE per nozzle (MPa; clearRequiredPressure = back to the design default), zone (deluge zone), lineNo, disabled, nozzleModel, drain orifice diameter (K recalculated). One undo step. [bulc-mcp rules] SPR-010, SPR-011, SPR-017 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
allNo
kindNoSelect nozzles of this kind
zoneNoSelect nozzles in this zone
lineNoNoSelect nozzles on this line number
headIdsNo
kFactorNoNew K [L/min·bar^½]
nodeIdsNo
setKindNoNew kind
setZoneNoNew zone ("" removes)
disabledNoExclude from / include in the calculation
setLineNoNoNew line number ("" removes)
nozzleModelNo
requiredPressureNoNew required pressure [MPa]
orificeDiameterMmNodrain: orifice diameter [mm] → K
clearRequiredPressureNoUse the design default required pressure again

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds real behavioral context beyond that: 'One undo step', that orifice diameter causes K to be recalculated, and that clearRequiredPressure resets to the design default. It doesn't cover permissions or partial-failure behavior, but it clears the annotation baseline.

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 purpose and selection mechanics, then the settable fields, then the undo note. Dense but dense in proportion to 15 parameters. The trailing rules-reference sentence is slight tack-on but relevant. No filler.

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?

For a 15-parameter, 0-required bulk mutation with no output schema, the description covers selection, all mutation targets, and the undo unit of work. Return values aren't needed since there's no output schema. Minor gaps: no explicit note on what happens if a filter matches nothing and no statement of required permissions.

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?

With 73% schema coverage the baseline is around 3, but the description adds genuine meaning: clearRequiredPressure = 'back to the design default', orifice diameter → 'K recalculated', zone as 'deluge zone', and disabled semantics. It resolves the ambiguity between the selection params (kind/zone/lineNo) and the set params (setKind/setZone/setLineNo), which the schema alone doesn't make obvious.

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+resource: batch-setting nozzle data on pipe-network nozzles. The scope ('many... at once') and the set-able fields distinguish it from single-node tools like spr_update_sprinkler_head and spr_update_node in the sibling list. An agent can identify the operation without opening the schema.

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?

The description explains how to select targets (all/headIds/nodeIds/zone/lineNo/kind, filters combine), which is useful operational guidance. However, it never states when to use this bulk setter instead of the sibling single-item updaters. Usage is implied rather than explicitly routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_set_pipesSpr set pipesA
Idempotent

Change many pipes at once: choose all / pipeIds / lineNo / runOf (the run through that pipe up to branches); set the pipe standard (material, C resets unless keepC), Hazen-Williams C, line number. One undo step per change. Out-of-standard sizes keep their size (inner diameter = nominal) and are reported. [bulc-mcp rules] SPR-003, SPR-005, SPR-021 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
allNo
keepCNoKeep each pipe C when changing the standard
runOfNoSelect the run through this pipe id (stops at branches, ends and the source)
lineNoNoSelect pipes with this line number
cFactorNoNew Hazen-Williams C
pipeIdsNo
materialNoPipe standard id (schedule included). Building: KSD3507 | CPVC | STS304 | ASTM_SCH40. Marine/plant: JIS_G3454_STPG_SCH40/SCH80, KS_D3562_SPPS_SCH40/SCH80, JIS_G3452_SGP, JIS_G3459_SUS_SCH10S/SCH40, ASTM_A53_A106_SCH40/SCH80, DIN86019_CUNI10FE (CuNi 90/10), … (enum). C resets to the standard default unless cFactor is given.
setLineNoNoNew line number ("" removes)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=true), so the bar is lower, and the description still adds real behavior: 'One undo step per change' (undo grouping), 'C resets unless keepC' (silent value reset), and out-of-standard pipes keeping nominal size and being reported. These are genuinely useful mutation side-effects.

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 core operation and is dense with no filler, though the second sentence is a long multi-clause run-on that mixes selection, setting, undo, and reporting in one breath. Still, every sentence earns its place.

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?

No output schema and no required parameters, so the description must carry the behavior, and it does: selection modes, what gets set, C-reset semantics, undo atomicity, and out-of-standard handling. Only an explicit pointer to spr_update_pipe for single-pipe edits is missing.

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?

With 75% schema coverage the schema carries most of the load, but the description adds meaning: it explains keepC's effect on C, ties cFactor to Hazen-Williams C, clarifies setLineNo, and defines runOf as 'the run through that pipe up to branches'. It complements rather than repeats the schema.

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 concrete verb and resource with scope: 'Change many pipes at once' plus the selection modes and the attributes it can set. The phrase 'many pipes at once' implicitly distinguishes it from the single-pipe sibling spr_update_pipe, though that sibling is never named.

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?

Describes how to select pipes (all / pipeIds / lineNo / runOf) which implies usage context, but gives no explicit when-to-use-this-vs-spr_update_pipe guidance and no exclusions or prerequisites. The bulc rule references hint at governance but don't route the agent between tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_set_valvesSpr set valvesA
Idempotent

Open / close valves (closed valve → that pipe is excluded from the calculation, downstream is isolated) and set their tag or zone (zone valve = open only in the "all" scenario and its own zone scenario). Choose with pipeId (+ index, default all valves on the pipe), tag, or zone. [bulc-mcp rules] SPR-008, SPR-022 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoSelect valves with this tag (e.g. WS-11U)
openNotrue = open, false = closed
typeNoNew valve type
zoneNoSelect zone valves of this zone
indexNoValve index on the pipe (spr_list_summary order); default every valve on the pipe
pipeIdNo
setTagNoNew tag ("" removes)
setZoneNoNew zone ("" removes — normal valve)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations (idempotent, non-destructive) by disclosing domain behavior: a closed valve excludes that pipe from the calculation and isolates downstream, and a zone valve is open only in the 'all' and its own zone scenario. This is real behavioral context an agent could not get from the annotations or schema.

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 core action and follows with targeting rules and rule references; dense parentheticals carry useful information rather than filler. Slightly crowded but every clause earns its place.

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?

For an 8-parameter, no-output-schema mutation tool, the description covers selectors, default scope, valve semantics, and points to the governing bulc rules. It omits error/edge behavior and preconditions (e.g. needing a loaded network), leaving minor gaps.

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 coverage is already 88%, so the baseline is 3, but the description adds the selection model tying pipeId+index, tag, and zone together and reiterates the index default. It clarifies relationships between parameters rather than merely repeating field descriptions.

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 specific verbs (open/close) on a specific resource (valves) plus a secondary operation (set tag/zone), and explains what a closed valve means for the model. This distinguishes it from nearby siblings like spr_set_pipes and spr_set_nozzles, though it does not name an alternative explicitly.

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?

Tells the agent how to target valves: by pipeId (+ index, default all valves on the pipe), by tag, or by zone, and clarifies the zone-valve scenario semantics. It gives clear usage context but no explicit when-not-to-use or prerequisite conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_update_nodeSpr update nodeB
Idempotent

Update properties of an existing pipe network node, including its fitting (auto = detect from connected pipes). [bulc-mcp rules] DEVC-001, EVAC-001, SPR-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNew X position (m)
yNoNew Y position (m)
zNoNew Z position (m)
idYesNode ID
typeNoNew node type: junction | sprinkler | source
labelNoNew label
fittingNoFitting override: auto | none | elbow90 | elbow90_long | elbow45 | tee | cross | wye | reducer
floorIndexNoStory id the node belongs to

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=false and idempotentHint=true, so the safety profile is covered. The description adds one genuine behavioral detail beyond annotations (fitting=auto detects from connected pipes), but says nothing about partial-update semantics, what happens to unspecified fields, or validation on the required id.

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 and compact: the core action leads, with the fitting parenthetical and the bulc rules tag trailing. No filler, though the bracketed rules line is somewhat cryptic without expansion.

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?

For an 8-parameter idempotent update tool with no output schema, the annotations carry the safety profile and the schema carries parameter detail, so the description is barely adequate. It omits update semantics and any note on what the tool returns or validates.

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 100%, so the schema already documents all 8 parameters with units and the fitting enum. The description's note on fitting=auto is the only added semantics, so the baseline 3 is appropriate.

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 gives a specific verb+resource ("Update properties of an existing pipe network node") and adds the fitting behavior. The add/remove/update distinction from siblings spr_add_node and spr_remove_node is clear from the verb, 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?

The word "existing" implies a node must already be present, but the description gives no when-to-use vs alternatives guidance, no mention of when to prefer spr_add_node or spr_remove_node, and no exclusions. The bulc rules reference points at a knowledge lookup, not usage conditions for this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_update_pipeSpr update pipeA
Idempotent

Update properties of an existing pipe: diameter, pipe standard (C resets to the standard default), Hazen-Williams C, line number, and the inline valve list (replaces all valves; [] removes them; valveDetails sets open/closed, tag, zone). For many pipes use spr_set_pipes; to open/close one valve use spr_set_valves. [bulc-mcp rules] SPR-008, SPR-005, SPR-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPipe ID
lineNoNoLine number ("" removes it)
valvesNoReplace the inline valves on this pipe: gate_valve | butterfly_valve | check_valve | alarm_valve | globe_valve | angle_valve ([] = none)
cFactorNoHazen-Williams C used by the hydraulic calculation (e.g. 100 dry black steel, 120 wet steel, 150 CPVC/stainless)
diameterNoNew nominal diameter (mm)
materialNoPipe standard id (schedule included). Building: KSD3507 | CPVC | STS304 | ASTM_SCH40. Marine/plant: JIS_G3454_STPG_SCH40/SCH80, KS_D3562_SPPS_SCH40/SCH80, JIS_G3452_SGP, JIS_G3459_SUS_SCH10S/SCH40, ASTM_A53_A106_SCH40/SCH80, DIN86019_CUNI10FE (CuNi 90/10), … (enum). C resets to the standard default unless cFactor is given.
valveDetailsNoValves with state: [{type, open (false = closed → pipe excluded), tag (e.g. WS-11U), zone (zone valve: open only in "all" and that zone), position 0..1}]. Overrides valves.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnly=false, idempotent=true, destructive=false, so the safety profile is set. The description adds real value beyond them: the valve list replaces all valves, [] removes them, valveDetails overrides and carries open/closed state, and C resets to the standard default unless cFactor is given. These are non-obvious mutation semantics not encoded in annotations.

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 dense sentences: the mutation is front-loaded, then the alternatives. Every clause earns its place by specifying a distinct field's behavior; no padding.

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?

For a 7-parameter mutation tool with no output schema but full schema description coverage, the description covers the mutation semantics, the reset rule, and the sibling routing. Minor gaps remain around permissions/prerequisites, but nothing an agent needs to invoke it correctly is missing.

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 coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: the C-resets-to-standard-default rule, the replace-all-versus-append semantics of the valves list, and that valveDetails overrides valves. That is more than merely restating the schema.

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 (Update) and resource (existing pipe) and enumerates the mutable properties: diameter, pipe standard, Hazen-Williams C, line number, and the inline valve list. It further distinguishes itself from siblings by explicitly naming spr_set_pipes and spr_set_valves, so an agent can tell it apart without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes: bulk edits go to spr_set_pipes, single-valve open/close goes to spr_set_valves. The when-to-use-this vs alternatives is stated rather than implied, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_update_sprinkler_headSpr update sprinkler headA
Idempotent

Update one pipe-network sprinkler head: K / activation temperature / RTI / type, its shared spray profile (sprayProfileId), per-head spray overrides (spray = &PROP keys, particle = &PART keys, inherit = keys to hand back to the profile, clearSpray = drop all). Applied FDS copies of the head are rebuilt. For many heads or obstacle/DEVC sprinklers use spr_set_head_spray. [bulc-mcp rules] SPR-010, SPR-011 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSprinkler head ID
rtiNoNew Response Time Index (m·s)^½
zoneNoDeluge zone
sprayNoPer-head FDS &PROP overrides — same keys as spr_upsert_spray_profile.prop (e.g. {"particles_per_second":10000,"spray_angle":[0,70]}).
lineNoNoLine number
inheritNoOverride keys to remove so the head follows its profile again (prop/part key names)
kFactorNoNew K-Factor, metric L/(min·bar^½)
disabledNoExclude from the calculation
headTypeNoNew type: pendant | upright | sidewall
particleNoPer-head FDS &PART droplet overrides — same keys as spr_upsert_spray_profile.part (e.g. {"diameter":800,"age":600}).
clearSprayNoRemove every per-head spray override (K / activation temperature / RTI back to the profile)
nozzleKindNoclosed (sprinkler) | open (open nozzle) | drain (drain hole)
clearFieldsNoRemove these nozzle fields (requiredPressure → back to the design default)
nozzleModelNoNozzle model name
activationTempNoNew activation temp (°C)
coverageRadiusNoNew coverage radius (m)
sprayProfileIdNoLink the head to this shared spray profile (takes the profile K / activation temperature / RTI unless given here)
requiredPressureNoRequired discharge pressure of this nozzle [MPa]
orificeDiameterMmNodrain orifice diameter [mm] (K is recalculated unless kFactor is given)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=false. The description adds real behavioral context beyond that: 'Applied FDS copies of the head are rebuilt' and the override lifecycle semantics (inherit hands keys back to the profile, clearSpray drops all). It stops short of explaining reload timing or response shape, so not a 5.

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?

Action and edit surface are front-loaded, and the alternative is placed last. The parenthetical parameter inventory makes one dense sentence but each clause carries distinct semantics; the trailing rules reference adds minor noise but is purposeful.

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?

For a 19-parameter mutation tool with full schema coverage and annotations, the description covers the override model, the profile linkage, the rebuild side effect, and the sibling alternative. No output schema exists, yet the description does not describe what the update returns, which is the main remaining gap.

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 coverage is 100%, so the baseline is 3, but the description goes beyond it by defining the override model (spray = &PROP keys, particle = &PART keys, inherit = keys to remove, clearSpray = drop all) and cross-referencing spr_upsert_spray_profile for key vocabularies. That adds meaning the flat schema does not convey.

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 and resource ('Update one pipe-network sprinkler head') and enumerates the editable facets (K, activation temperature, RTI, type, spray profile, per-head overrides). It also names the sibling it is not (spr_set_head_spray), so an agent can distinguish it without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes to the alternative: 'For many heads or obstacle/DEVC sprinklers use spr_set_head_spray.' The condition (single head vs. many/obstacle/DEVC) that selects each tool is spelled out, and it references the governing bulc rules for deeper guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_update_water_sourceSpr update water sourceA
Idempotent

Update an existing water source (type, city-water pressures, pump rated flow / rated head / shut-off head / curve, tank level). [bulc-mcp rules] SPR-001, SPR-003, SPR-016 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWater source ID
pumpCurveNoPump curve points [{flow L/min, pressure MPa}] (overrides rated/shut-off interpolation)
sourceTypeNocity_water | pump | gravity_tank | pressure_tank
tankVolumeNoTank volume (m³)
residualFlowNoResidual flow (L/min, default 1000) — city water
pumpRatedFlowNoPump rated flow (L/min)
pumpRatedHeadNoPump rated pressure (MPa) at the rated flow (1 MPa ≈ 102 m head)
tankElevationNoGravity tank water level elevation (m)
staticPressureNoStatic pressure (MPa, default 0.5) — city water / pressure tank
pumpShutoffHeadNoPump shut-off (churn) pressure at zero flow (MPa)
residualPressureNoResidual pressure (MPa, default 0.3) at residualFlow — city water

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only the set of mutable fields and does not disclose whether unlisted fields are preserved (partial vs. full replace), any validation constraints, or what the response contains.

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?

Two compact lines with the core action front-loaded and no redundant prose. The bracketed rule-reference line is slightly cryptic but does not pad the text; a minor deduction only because it is unexplained inline.

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?

For an 11-parameter mutation tool, annotations cover the safety profile and the schema documents every parameter with units and defaults, so the description's job is mostly purpose plus field coverage, which it does. The one real gap is the absence of any statement on partial-update semantics or return behavior, but given the rich annotations and full schema coverage this is a minor omission.

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 100% and each parameter is documented with units (L/min, MPa, m³, defaults), so the schema carries the semantic load. The description's field list adds nothing beyond the schema's enum values and parameter descriptions, making the baseline 3 appropriate.

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 ('Update') and resource ('an existing water source'), and enumerates the updateable facets (type, pressures, pump flow/head/curve, tank level). It clearly distinguishes itself from spr_add_water_source and spr_remove_water_source by verb, though it never names those siblings 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 'an existing water source' (use when modifying, not creating/removing), but there is no explicit when-to-use/when-not guidance or named alternative. The '[bulc-mcp rules]' citation points to knowledge-search lookups but does not tell the agent which conditions select this tool over spr_add_water_source or spr_pump_sizing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spr_upsert_spray_profileSpr upsert spray profileA

Create, update or delete a shared SPRAY PROFILE — the FDS 6.10.1 &PROP+&PART template (flow, spray pattern, droplet size distribution, breakup, drag, evaporation, surface film, parcels) that sprinkler and water-mist heads reference. Omit id (or give a new id) to create: it starts from preset (default std_pendant_k80) or copy_from. With an existing id, preset overwrites its values, prop/part merge keys and unset_prop/unset_part return keys to the FDS default. Presets: standard, quick response, ESFR, residential, water mist low (12 bar) / intermediate (21 bar) / high (70-100 bar) — spr_list_summary {include_presets:true}. assign_to links heads to the profile (pipe heads take its K, activation temperature and RTI). Every edit is checked like FDS (K or pressure alone = ERROR 238, no DIAMETER = 214, equal SPRAY_ANGLE = 231, bad EVAP_MODEL = 224) for the profile and every head using it; on error nothing changes. Per-head overrides: spr_set_head_spray.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoProfile id. Existing = update; new or omitted = create
nameNoDisplay name
partNoFDS 6.10.1 &PART water-droplet keys (lowercase FDS names; diameters in µm). Unset = FDS default.
propNoFDS 6.10.1 &PROP spray keys (lowercase FDS names, FDS units). Unset = FDS default.
deleteNoDelete the profile (refused while heads use it or if it is the last one)
presetNoPreset to start from (new) or to overwrite the values with (existing)
assign_toNoLink heads to this profile
copy_fromNoNew profile = copy of this profile id
unset_partNopart keys to remove (FDS default)
unset_propNoprop keys to remove (FDS default)
fds_part_idNoFixed &PART ID written for this profile (for PART_ID in AMPUA/MPUV devices; "" = derive)
fds_prop_idNoFixed &PROP ID written for this profile ("" = derive)
make_defaultNoMake it the project default profile (new heads and heads without a profile follow it)
advanced_partNoExtra raw &PART 'KEY=VALUE' entries; [] clears
advanced_propNoExtra raw &PROP 'KEY=VALUE' entries (checked against the FDS 6.10.1 key list); [] clears

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give the generic safety hints; the description goes much further, disclosing that every edit is FDS-validated (specific ERROR codes 238/214/231/224) with atomic 'on error nothing changes' semantics, and that delete is refused while heads use the profile or if it is the last one. This is exactly the extra behavioral context the annotations cannot carry.

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?

It leads with the core purpose and every sentence carries substantive information (routing, validation, presets) with no filler, which is appropriate for a 15-parameter nested tool. The single dense paragraph is harder to scan than a segmented version, costing it the top mark.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex upsert with nested objects and no output schema, the description covers all the modes (create/update/delete), the preset system, validation and atomicity, and head assignment. Nothing critical to invoking it correctly is left out.

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 coverage is 100%, so the baseline is 3, but the description adds real semantics the schema lacks: the default preset (std_pendant_k80), that preset overwrites an existing profile, that unset_prop/unset_part drop keys back to FDS defaults, and that assign_to makes pipe heads inherit K/temperature/RTI. That elevates it above baseline.

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 precise compound verb (create/update/delete) on a specific resource (shared SPRAY PROFILE = FDS 6.10.1 &PROP+&PART template) and scopes it to sprinkler and water-mist heads. It names the fields it governs and clearly separates itself from spr_set_head_spray (per-head overrides) and spr_list_summary (preset listing).

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?

Explicitly states the create/update conditions ('Omit id (or give a new id) to create', 'With an existing id, preset overwrites') and routes related tasks to siblings (spr_set_head_spray for per-head, spr_list_summary for presets). It lacks an explicit 'do not use when…' exclusion, but the branching logic is clear enough for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transform_obstacleTransform obstacleA

Move / resize / rotate an existing obstacle (the 3D gizmo + property-panel SX/SY/SZ of the GUI). move = relative offset [dx,dy,dz] (m); place_at = absolute target point for anchor (default the XB centre); scale = absolute per-axis scale factors that stretch XB about its centre and rescale furniture voxels; rotation = [rx,ry,rz] degrees (kept as GUI metadata — &OBST itself stays axis-aligned, so a rotated furniture item is exported through its voxels). Combine as many as you need in one call. [bulc-mcp rules] DEVC-001, GEN-003, GEO-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesObstacle ID (see list_obstacles)
moveNoRelative offset [dx,dy,dz] in metres
scaleNoAbsolute scale factors [sx,sy,sz] (1 = unchanged)
anchorNoplace_at reference: 'center' (default), 'min' (XB min corner), 'base' (XY centre at z_min)
place_atNoAbsolute target point [x,y,z] for `anchor`
rotationNoRotation [rx,ry,rz] in degrees

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly=false and destructive=false; the description goes well beyond that by disclosing that rotation is GUI metadata only and that &OBST stays axis-aligned, with rotated furniture exported through its voxels, and that scale stretches the XB about its centre and rescales furniture voxels. These are non-obvious behavioral facts an agent needs. It does not state the return payload or error behavior, capping it below 5.

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 verb/resource, then enumerates each parameter's semantics compactly in a single dense paragraph, with the bulc rule references appended last. Efficient for the amount of information conveyed, though the trailing rule-ID line is slightly noisy.

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?

For a 6-parameter mutation tool with no output schema and full schema coverage, the description covers operation semantics, composition, and the non-obvious axis-alignment/rotation distinction. It omits any statement of what is returned or what happens on invalid IDs, but those gaps are minor given no output schema exists.

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 100%, so baseline is 3. The description nonetheless adds real meaning: it defines move as relative vs place_at as absolute, names the anchor default (XB centre), clarifies scale is absolute per-axis, and adds the rotation-as-GUI-metadata caveat absent from the schema. It goes beyond the schema rather than restating it.

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 set of operations (move/resize/rotate) on a specific resource (existing obstacle), with a concrete anchor to the GUI's 3D gizmo and SX/SY/SZ property panel. Clear enough to act on, but it never distinguishes itself from the close sibling update_obstacle or shape_transform, which an agent could easily confuse it with.

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?

'Combine as many as you need in one call' gives genuine guidance on operation composition, and the mention of GUI parity implies it is the interactive-editing path. However, there is no explicit when-to-use versus update_obstacle/shape_transform, nor any stated preconditions (e.g. selection state or ID discovery), so usage remains implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_controlUpdate controlB
Idempotent

Update an existing CTRL by ID. Any field of add_control can be changed. [bulc-mcp rules] DEVC-004, DEVC-006 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo
idYesControl ID to update
delayNo
latchNo
ramp_idNo
constantNo
input_idNo
on_boundNo
setpointNo
setpoint2No
target_valueNo
function_typeNo
initial_stateNo
integral_gainNo
trip_directionNo
differential_gainNo
proportional_gainNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is known. The description adds little beyond that: it does not clarify whether this is a partial merge (unspecified fields preserved) or a full replace, which is the critical behavioral question for a 17-field update.

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 in the first clause, and the two sentences are economical. The trailing '[bulc-mcp rules] DEVC-004, DEVC-006 — bulc_knowledge_search <id>' is cryptic and slightly disrupts the otherwise clean structure.

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?

A mutation tool with 17 params, 6% schema coverage, and no output schema needs much more than this. The description omits which fields are meaningful, whether updates merge or replace, and any return/validation behavior, leaving substantial responsibility on annotations that only cover the safety profile.

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 coverage is only 6% — 16 of 17 parameters (n, delay, latch, ramp_id, gains, on_bound, etc.) are completely undocumented. The description's 'Any field of add_control can be changed' only defers field meaning to another tool rather than explaining it, 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?

States a specific verb and resource ('Update an existing CTRL by ID') and distinguishes itself from sibling add_control/remove_control by framing it as modification of an existing object. 'CTRL' is FDS jargon left unexplained, but the reference to add_control's field set gives the agent a concrete anchor.

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 — update an existing control rather than add or remove one — and the rule pointer to bulc_knowledge_search hints at a compliance context, but no explicit when-to-use/when-not or named alternative is given. The agent must infer the update-vs-add boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_deviceUpdate deviceB
Idempotent

Update an existing device by ID (or internal uid). Any &DEVC field can be changed; only one device is modified even with duplicate IDs. [bulc-mcp rules] DEVC-001, DEVC-003, DEVC-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDevice ID (or uid) to update
xbNoRegion [x1,x2,y1,y2,z1,z2] — plane for flow, box for HRR/statistics, segment for beam, column for layer
iorNoWall direction for solid quantities: ±1(X) ±2(Y) ±3(Z)
xbpNoLine endpoints for points>1: [x1,x2,y1,y2,z1,z2]
xyzNoPoint position [x,y,z] (m)
delayNoAspiration transport delay (s)
depthNoDEPTH (m) for INSIDE WALL TEMPERATURE
latchNofalse → re-trips allowed (LATCH=.FALSE.; default true)
outputNofalse → omit column from devc.csv (control-only device)
pointsNo>1 → expand XBP line into N point devices (ID-01..)
ctrl_idNoCTRL reference (required for QUANTITY=CONTROL / CONTROL VALUE)
devc_idNoASPIRATION unit id (for sampling points)
duct_idNoHVAC duct id (DUCT quantities)
node_idNoHVAC node id(s) — 2 for NODE PRESSURE DIFFERENCE
part_idNoParticle class for MPUV/ADD/AMPUA etc.
prop_idNoPROP model reference (detector/sprinkler properties)
spec_idNoSpecies: OXYGEN, CARBON DIOXIDE, CARBON MONOXIDE, SOOT, WATER VAPOR, or fuel name
flowrateNoAspiration sampling flowrate (>0)
quantityNoFDS QUANTITY (e.g. TEMPERATURE, VOLUME FRACTION, MASS FLOW +, LAYER HEIGHT, PATH OBSCURATION, HRR, CONTROL)
relativeNoSubtract first output value
rotationNoRotation about orientation axis (deg)
setpointNoTrip threshold (device acts as trigger when crossed)
quantity2NoSecond quantity for COV/CORRCOEF
pipe_indexNoSprinkler pipe group (default 1)
orientationNoSensor direction vector (default 0,0,-1)
initial_stateNoStart in tripped state (INITIAL_STATE)
absolute_valueNoOutput |x|
quantity_rangeNoValue gate [min,max] for integral statistics
smoothing_timeNoSmoothing time constant (s, overrides factor)
trip_directionNo+1 ascending (default) / -1 descending crossing
bypass_flowrateNoAspiration unit bypass flowrate
smoothing_factorNoExponential smoothing 0..1
conversion_addendNoOutput = factor*x + addend (default 0)
conversion_factorNoOutput = factor*x + addend (default 1)
no_update_devc_idNoFreeze this output when the referenced device trips
spatial_statisticNoMEAN, MAX, MIN, VOLUME MEAN/INTEGRAL, MASS MEAN/INTEGRAL, AREA INTEGRAL, SUM, VOLUME, MASS (needs xb)
temporal_statisticNoTIME AVERAGE, RUNNING AVERAGE, MAX, MIN, MAX TIME, MIN TIME, TIME INTEGRAL, RMS, COV, CORRCOEF, SMOOTHED

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the write/idempotent/non-destructive profile, but the description adds real context beyond them: "Any &DEVC field can be changed" and the duplicate-ID single-device guarantee. It stops short of 5 because it says nothing about permissions, side effects on dependent outputs, or reversibility.

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?

Two tight sentences with the core action front-loaded, followed by a short rules reference. Appropriate length for a 37-parameter tool, though the bracketed bulc fragment is slightly opaque.

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?

Annotations cover the safety profile and the schema fully documents parameters, so the description only needs to convey purpose and scope, which it does. However, for a highly complex 37-field mutation with no output schema, it omits any note on field interactions (e.g. ctrl_id requirements) that would make it complete.

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 100%, so all 37 parameters are already documented in the schema, which sets the baseline at 3. The description only adds the generic "any &DEVC field can be changed" note, contributing no field-level semantics beyond the schema.

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 ("Update an existing device by ID (or internal uid)") and clarifies mutation scope ("only one device is modified even with duplicate IDs"). It does not explicitly name sibling tools like add_device/remove_device to differentiate, so it stops short of the top band.

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 offers no when-to-use or when-not-to-use guidance and never points to an alternative tool (e.g. add_device for creation, remove_device for deletion). The bulc reference is about rule compliance, not usage selection, so this is close to no guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_dump_configUpdate dump configC
Idempotent

Update output dump intervals and settings. [bulc-mcp rules] EVAC-008, OUT-001, OUT-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
dt_hrrNoHRR CSV output interval (s)
dt_s3dNoSmoke3D output interval (s)
dt_bndfNoBoundary (.bf) output interval (s). Omit or 0 to leave DT_BNDF out of the deck; the GPU engine then writes BNDF at the DT_SLCF interval.
dt_devcNoDevice CSV output interval (s)
dt_pl3dNoPlot3D output interval (s)
dt_slcfNoSlice file output interval (s)
nframesNoFDS NFRAMES (default 1000): any DT_* left unset is filled with (T_END-T_BEGIN)/NFRAMES. Lower it to cut slice/smoke frame count and disk usage on long runs.
write_xyzNoWrite XYZ grid file
dt_restartNoRestart/checkpoint interval (s). The GPU engine now writes a resumable checkpoint at this cadence.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnly=false, idempotent=true, and destructive=false, so the safety profile is known. The description adds no behavioral context of its own beyond the title: it never states what happens to parameters left unset (the schema, not the description, explains the NFRAMES backfill) or what merging behavior applies. With annotations doing the work, the description is nearly pure restatement.

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 core sentence is short, front-loaded, and free of padding. The trailing bracketed rules reference is terse but not clearly earning its place in a tool description, costing it the top score.

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?

For a 9-parameter mutation tool with no output schema, the description is thin: it defers entirely to the schema for parameter semantics and gives no guidance on interaction between parameters. Since the schema is detailed and annotations cover the safety envelope, this is adequate but with a clear gap around usage and side effects.

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 100%, so every one of the 9 parameters is already documented in the schema, including the NFRAMES backfill and the DT_BNDF omit/0 semantics. The description adds no parameter syntax or meaning beyond what the schema provides, so the baseline of 3 applies.

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 verb and resource ('Update output dump intervals and settings'), so an agent can tell it is a mutation of FDS output cadence settings. However, it does not differentiate from nearby siblings that also touch outputs (set_plot3d_outputs, update_slcf, set_plot3d_outputs), so the scope boundary is left implicit.

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 when-to-use guidance, no prerequisites, and no named alternative. The bracketed 'bulc-mcp rules' line references rule IDs but does not tell the agent when this tool is the right choice versus set_plot3d_outputs or update_slcf.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_fireUpdate fireC
Idempotent

Update an existing fire source by index (0-based). [bulc-mcp rules] FIRE-001, FIRE-002, FIRE-003 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
xbNo
indexYesFire index (0-based)
hrrpuaNo
ramp_idNo
tmp_frontNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is partly covered. The description adds nothing beyond the index semantics - it does not say which fields get overwritten, what happens to omitted parameters, or why the rule references matter, leaving a mutation tool under-disclosed.

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 purpose is front-loaded in a single efficient sentence, and the definition is short with no padding. The cryptic rule-reference line is low-value but consumes minimal space.

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?

For a 5-parameter mutation tool with no output schema and 20% parameter coverage, the description is far too thin. An agent cannot tell how to correctly supply hrrpua, ramp_id, tmp_front, or xb, nor what a successful update returns or replaces.

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 coverage is only 20% (only 'index' described), so the description carries most of the burden. It merely repeats the 0-based index fact and adds nothing about xb (a fixed 6-element array), hrrpua, ramp_id, or tmp_front, whose units and roles are undocumented in both places.

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 ('Update an existing fire source') and pins the identifier scheme as 0-based index. It does not, however, distinguish itself from the nearby add_fire/remove_fire siblings or explain what 'update' changes.

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 when-to-use guidance: nothing says when to call update_fire versus remove_fire + add_fire, nor whether the update is full-replace or partial. The trailing '[bulc-mcp rules] FIRE-001...' line is opaque and only gestures at an external lookup without stating any condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_holeUpdate holeC
Idempotent

Update an existing hole by ID. [bulc-mcp rules] EVAC-002, GEN-003, GEO-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHole ID to update
xbNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the safety story is covered. The description adds nothing beyond that: it doesn't say what fields get modified, whether omitted fields are preserved or cleared, or what the rule codes EVAC-002/GEN-003/GEO-004 actually constrain.

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?

The first sentence is tight and front-loaded. The second line is terse but its rule-tag format is opaque and arguably wastes space rather than earning it, so structure is adequate but not clean.

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?

For a mutation tool with no output schema and an undocumented geometry parameter, the description is insufficient. An agent cannot tell what an update actually changes about the hole or how to populate xb.

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 only 50%: while 'id' is documented in the schema, the 'xb' parameter (a 6-element coordinate array) has no description anywhere. The description mentions only the ID and does nothing to explain xb's meaning or format, 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?

The description gives a specific verb and resource ('Update an existing hole by ID'), which cleanly separates it from add_hole, remove_hole, and update_obstacle. It does not, however, explain what a 'hole' is in this context or how the update differs from sibling mutations.

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 when-to-use guidance, no prerequisites, and no mention of alternatives such as remove_hole or add_hole. The appended '[bulc-mcp rules] EVAC-002, GEN-003, GEO-004 — bulc_knowledge_search "<id>"' is a cryptic tag rather than actionable routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_materialUpdate materialC
Idempotent

Update a material by ID. [bulc-mcp rules] SURF-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMaterial ID to update
densityNo
emissivityNo
conductivityNo
specific_heatNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the full safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description only needs to add context beyond that. It adds nothing — no mention of which properties change, what happens to unspecified fields (partial vs full replacement), permission needs, or error behavior. The rules tag contributes no behavioral information.

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?

The core sentence is tight and front-loaded, but the appended bracketed rules line is noise that an agent may misread as a required follow-up call, wasting attention. Size itself is fine.

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?

For a five-parameter mutation tool with no output schema and 20% schema coverage, the description should at minimum explain the update semantics (partial vs full) and the material properties being set. Instead it supplies one sentence plus an unrelated rules reference, leaving the agent under-informed.

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 only 20% — just the id parameter is documented. The description names no parameters and does not explain units or semantics for density, emissivity, conductivity, or specific_heat, leaving the schema's raw property names to carry the load. It adds nothing beyond what is already in the schema.

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?

"Update a material by ID" states a specific verb (update), resource (material) and lookup key (ID), so the operation is unambiguous. It does not, however, distinguish itself from siblings such as add_material, remove_material, or update_surface, which an agent must disambiguate by name alone.

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 guidance on when to use this tool versus add_material, add_material_from_library, or update_surface, and no prerequisites or exclusions are given. The appended "[bulc-mcp rules] SURF-001" line appears to be a policy artifact rather than usable routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_obstacleUpdate obstacleC
Idempotent

Update an existing obstacle by ID. Provide only fields to change. [bulc-mcp rules] GEN-003, GEO-002, GEO-005 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesObstacle ID to update
xbNo
surf_idsNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the mutation/safety profile is covered structurally. The description adds the useful partial-update contract ('provide only fields to change'), but says nothing about whether omitted fields are preserved, whether an FDS re-run/validation is needed, or any failure modes.

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?

The first sentence is tight and front-loaded. The second sentence is useful, but the appended '[bulc-mcp rules] GEN-003, GEO-002, GEO-005' block is opaque noise that consumes attention without conveying actionable meaning to the caller.

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?

A mutation tool with no output schema and two undocumented parameters should carry more of the load: valid ranges/meaning for xb, the format of surf_ids, whether surf_ids must already exist, and side effects on the simulation. None of that is present, leaving the definition materially incomplete.

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 only 33% — just 'id' is documented. The description adds nothing about xb (a fixed 6-number array, presumably a bounding box) or surf_ids (surface references), which are the substantive editable fields and exactly where the agent needs help. 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?

States a specific verb and resource ('Update an existing obstacle by ID'), which is clear and unambiguous. It does not, however, distinguish itself from nearby siblings such as transform_obstacle, set_fds_properties, or update_hole/update_vent, so an agent must infer the boundary.

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?

'Provide only fields to change' hints at patch semantics but gives no when-to-use guidance, no prerequisites, and no routing advice against transform_obstacle or set_fds_properties. The trailing rules citation (GEN-003, GEO-002, GEO-005) is an opaque pointer that does not tell the agent when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_propUpdate propB
Idempotent

Update an existing &PROP model by ID. Same fields as add_prop; spray_unset removes spray keys (FDS default). [bulc-mcp rules] DEVC-009 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPROP model ID to update
rtiNo
sprayNoOther &PROP spray keys (spr_upsert_spray_profile.prop names, FDS units)
beta_cNo
beta_eNo
lengthNo
offsetNo
alpha_cNo
alpha_eNo
part_idNo
c_factorNo
k_factorNo
quantityNo
flow_rateNo
spray_angleNo
spray_unsetNoSpray keys to remove (spr_upsert_spray_profile.prop names)
bead_densityNo
bead_diameterNo
bead_emissivityNo
bead_specific_heatNo
operating_pressureNo
initial_temperatureNo
activation_obscurationNo
activation_temperatureNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (write, idempotent, non-destructive, closed-world). The description adds one behavioral detail — 'spray_unset removes spray keys (FDS default)' — which is genuinely useful for an agent. But it does not clarify partial vs full update semantics (whether omitted fields are preserved) or permissions, leaving real uncertainty for a mutation tool.

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?

Two tight sentences are front-loaded and efficient, but the appended '[instructions] DEVC-009 — bulc_knowledge_search "<id>"' fragment is cryptic and reads like leaked internal scaffolding rather than useful definition text. It detracts from otherwise clean structure.

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?

For a 24-parameter mutation tool with nested objects, no output schema, and 13% schema coverage, the description is far too thin. It omits partial-update semantics, spray object shape, required-parameter behavior, and any return/error expectations, leaving the agent under-informed.

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 only 13% across 24 parameters, so the description carries the burden but does not meet it. It defers to add_prop ('same fields as add_prop') and explains only spray_unset; the other ~22 numeric fields (rti, beta_c, spray_angle, bead_*, etc.) remain undocumented in both schema and prose.

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 ('Update an existing &PROP model') and scopes it to 'by ID'. It implicitly distinguishes itself from the add_prop/remove_prop siblings via 'Same fields as add_prop', though it never names remove_prop or other property-editing routes. The jargon '&PROP model' is domain-specific but the intent is decipherable.

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?

The 'Same fields as add_prop' clause implies this is the editing counterpart to creation, giving implied context. However there is no explicit when-to-use vs alternatives (e.g. set_fds_properties, spr_upsert_spray_profile) and no prerequisites. The trailing 'instructions for the model' DEVC-009 pointer to bulc_knowledge_search is opaque rather than actionable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_rampUpdate rampB
Idempotent

Update an existing ramp with new points.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRAMP ID to update
pointsYesNew [time, value] pairs

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false). The description adds that this targets an existing ramp, but it does not resolve the important ambiguity of whether 'new points' replace the entire ramp definition or are appended, which matters for a mutation tool even when idempotency is hinted.

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 with no filler and the action front-loaded. However, the phrase 'new points' is terse to the point of ambiguity, so it is efficient but not maximally informative.

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?

For a two-parameter mutation tool with no output schema and full schema coverage, this is the minimum viable level. The description leaves the replace-vs-append semantics unstated and offers no confirmation of what the operation returns or affects.

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 100% and both parameters are documented in the schema ('RAMP ID to update', 'New [time, value] pairs'). The description adds no format, ordering, or unit detail beyond that, so the baseline 3 applies.

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 ('Update an existing ramp') and clarifies the payload is new points. It is distinguishable from add_ramp/remove_ramp by the word 'existing', though it never names those siblings 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?

No when-to-use guidance, no prerequisites (e.g., the ramp must already exist), and no reference to the alternative tools add_ramp or remove_ramp. Usage is only implied by the phrase 'existing ramp'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_reactionUpdate reactionC
Idempotent

Update the combustion reaction parameters. [bulc-mcp rules] FIRE-003, FIRE-007, FIRE-009 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
cNoCarbon atoms
hNoHydrogen atoms
nNoNitrogen atoms
oNoOxygen atoms
fuelNoFuel name (e.g. PROPANE, METHANE)
co_yieldNo
hcn_yieldNo
soot_yieldNo
heat_of_combustionNokJ/kg
radiative_fractionNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds nothing beyond 'update' – it doesn't explain how unspecified fields are treated (merge vs replace), what defaults apply, or what happens to existing parameters, so it contributes little behavioral context.

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?

The purpose sentence is short and front-loaded, which is good. The second line (a cryptic '[bulc-mcp rules] FIRE-003...' reference) is terse but its value and meaning are opaque, so it neither wastes much space nor clearly earns its place.

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?

This is a 10-parameter mutation tool with no output schema and only 60% parameter coverage. The description does not explain the effect of the update, required context, or the meaning of the undocumented parameters, leaving the agent without enough to call it correctly.

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 coverage is only 60%, leaving co_yield, hcn_yield, soot_yield, and radiative_fraction undocumented, and the description mentions no parameters at all. With this coverage gap the description should compensate by explaining the updatable fields but does not, so it adds no meaning over the schema.

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 (Update) and resource (combustion reaction parameters), which is more than a tautology and identifies the object being modified. However, it offers no differentiation from closely related siblings such as update_fire, add_fire, or add_species.

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 indication of when to use this tool versus alternatives like add_fire or update_fire, nor any prerequisites. The FIRE-xxx rules reference hints at external constraints but does not tell the agent when this tool is the correct choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_slcfUpdate slcfC
Idempotent

Update an existing SLCF output by ID. [bulc-mcp rules] OUT-002 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSLCF ID to update
pbxNo
pbyNo
pbzNo
vectorNo
spec_idNo
quantityNo
cell_centeredNo

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is largely covered structurally. The description adds nothing beyond that: it does not say whether this is a partial or full overwrite, what happens to unspecified fields, or whether the ID must already exist. Given annotation coverage the bar is lower, but the prose contributes almost no extra behavioral context.

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 and the core verb+resource is front-loaded, so there is no padding. However, the second sentence is a garbled rule reference that costs a line without conveying usable information, so brevity here reflects under-specification rather than efficient structure.

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?

For an 8-parameter mutation tool with no output schema and 13% schema coverage, the description is far too thin — it never characterizes the editable geometry/quantity fields or the effect of the update. It identifies the tool and the required ID but leaves the agent unable to construct a correct call.

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 only 13% — just the id field — leaving seven parameters (pbx, pby, pbz, vector, spec_id, quantity, cell_centered) undocumented in both schema and description. The description supplies no meaning, units, ranges, or defaults for any of them, so an agent cannot know what a valid update payload looks like.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource ("Update an existing SLCF output by ID"), which is better than a tautology, but SLCF is unexplained jargon and the description never distinguishes itself from siblings like add_slcf, remove_slcf, or list_slcf. An agent must already know what an SLCF output is to use this confidently.

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 versus add_slcf/remove_slcf, nor any prerequisite about the target object existing. The second sentence ("[bulc-mcp rules] OUT-002 — bulc_knowledge_search \"<id>\"") is a cryptic rule pointer rather than actionable guidance, and its quoting is ambiguous enough that an agent cannot reliably act on it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_surfaceUpdate surfaceA
Idempotent

Update an existing general surface (&SURF) by ID. Only the given fields change. [bulc-mcp rules] SURF-001 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSurface ID to update
colorNoDisplay color as #rrggbb (emitted as RGB=r,g,b)
tau_qNoTAU_Q [s] — ramp-up time (negative = t² growth)
hrrpuaNoHRRPUA [kW/m²] (manual mode)
layersNoMaterial layers, outermost first. Each layer: thickness [m] + material composition (mass fractions summing to 1).
mlrpuaNoMLRPUA [kg/(m²·s)] (manual mode, exclusive with hrrpua)
backingNoBACKING
ramp_idNoRAMP_Q id (overrides tau_q)
ignitionNoBurn immediately or ignite at a temperature
tmp_backNoTMP_BACK [°C]
burn_awayNoBURN_AWAY — allow the obstruction to burn away
cell_sizeNoCELL_SIZE [m] — solid-phase cell size
tmp_frontNoTMP_FRONT [°C] — fixed surface temperature
tmp_innerNoTMP_INNER [°C]
emissivityNoEMISSIVITY
descriptionNoFree-text description (FYI)
layer_divideNoLAYER_DIVIDE
surface_typeNoSurface type ('layered' = PyroSim general surface)
e_coefficientNoE_COEFFICIENT [m²/(kg·s)] — water extinguishing coefficient
external_fluxNoEXTERNAL_FLUX [kW/m²]
net_heat_fluxNoNET_HEAT_FLUX [kW/m²]
reaction_modeNo'material' = burning governed by MATL pyrolysis, 'manual' = governed by HRRPUA/MLRPUA on this surface
droplet_surfaceNoWater droplets on this surface (Cartesian OBST/WALL faces only): allow_surface_particles=false removes droplets that land on it (drain floor, slab between floors); allow_underside_particles lets films run under horizontal surfaces; particle_extraction_velocity [m/s] removes films faster than this.
species_injectionNoSpecies injection rows (SPEC_ID/MASS_FLUX/MASS_FRACTION/VEL/VOLUME_FLOW/TAU_V)
particle_injectionNoParticle injection (PART_ID/PARTICLE_MASS_FLUX/NPPC/DT_INSERT/PARTICLE_SURFACE_DENSITY)
heat_transfer_modelNoHEAT_TRANSFER_MODEL — gas-side convective correlation. 'DEFAULT' omits the key; any other string than these is rejected by FDS.
convective_heat_fluxNoCONVECTIVE_HEAT_FLUX [kW/m²]
heat_of_vaporizationNoHEAT_OF_VAPORIZATION [kJ/kg]
ignition_temperatureNoIGNITION_TEMPERATURE [°C]
droplet_surface_unsetNodroplet_surface keys to remove (FDS default)
heat_transfer_coefficientNoHEAT_TRANSFER_COEFFICIENT [W/(m²·K)]

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=false, so safety is covered; the description adds genuinely new behavioral context with 'Only the given fields change', i.e. merge/partial-update semantics rather than replacement, which is the key fact an agent needs before calling an update tool. It does not say what happens for an unknown ID or how nested layers/materials are reconciled, so it is not a 5.

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 core action and the merge rule are front-loaded in two short sentences with no filler. The appended rules pointer is terse and useful, though the embedded '<id>' quoting is slightly cryptic and costs a little polish.

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?

For a 31-parameter tool with nested objects, five enums, and no output schema, the definition is thin: it never addresses the interaction constraints encoded in the schema (hrrpua vs mlrpua exclusivity, reaction_mode material vs manual, layered vs burner surfaces). The SURF-001 knowledge-search pointer partially compensates by routing the agent to external rules, but nothing is stated inline.

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 100% and each of the 31 properties, including nested layer/material and injection objects, is documented inline. The description contributes no additional per-parameter meaning beyond the merge semantics already counted elsewhere, so the baseline 3 applies.

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 with the FDS domain term (&SURF) and the lookup key (by ID), which is enough to separate it from add_surface / remove_surface / assign_surface. It does not explicitly name an alternative tool, so it stops short of the top score, but the action 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when/when-not guidance versus siblings such as add_surface, update_material, or assign_surface. The '[bulc-mcp rules] SURF-001 — bulc_knowledge_search' line functions as a prerequisite pointer, implying the caller should consult a rule before editing, but no condition or exclusion is spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_ventUpdate ventC
Idempotent

Update an existing vent by ID. [bulc-mcp rules] GEN-003, VENT-002, VENT-004 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVent ID to update
xbNo
surf_idNo
mass_fluxNo
dynamic_pressureNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, and destructive=false, so the safety profile is covered. The description adds a non-obvious behavioral note about consulting bulc rules via bulc_knowledge_search, but says nothing about which fields mutate, whether changes propagate to the FDS model, or any auth/permission requirements. No contradiction with annotations.

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?

Front-loaded and short, which is good, but the second line is opaque: it cites rule IDs and a tool-name call snippet without explaining their relevance, so a byte is saved at the cost of clarity.

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?

For a mutation tool with no output schema and 80% of parameters undocumented, the description is too thin. It should at least characterize the mutable fields (xb geometry, surf_id boundary assignment, mass_flux, dynamic_pressure) to let an agent call it correctly.

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 only 20% (only id is documented), so the description carries the burden for xb, surf_id, mass_flux, and dynamic_pressure. It adds nothing beyond 'by ID' — no meaning, units, or format for those four parameters — leaving the gap unaddressed.

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 (Update) and resource (vent) scoped by ID, which an agent can distinguish from siblings add_vent, remove_vent, and list_vents. It stops short of differentiating from the parallel update_* family (update_obstacle, update_device), but the core purpose 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?

No explicit when-to-use or when-not-to-use guidance, and no named alternatives. The bulc rules line implies the agent should consult GEN-003/VENT-002/VENT-004, but it never says under what conditions to reach for this tool over add_vent or set_open_boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_projectValidate projectA
Read-onlyIdempotent

Pre-flight check of the whole project before export or run: deck generation, mesh/domain sanity, objects outside the domain, duplicate IDs, dangling SURF_ID / MATL_ID / CTRL INPUT_ID / DEVC references, output intervals larger than T_END (which would store only the t=0 frame), missing OPEN boundary, fire without a reaction fuel, LOCK_TIME_STEP without DT, and sprinkler / spray-profile key combinations FDS 6.10.1 rejects. Returns errors (deck will not run) and warnings (deck runs but the result is probably not what you want). [bulc-mcp rules] DEVC-004, DEVC-005, DEVC-006 — bulc_knowledge_search ""

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them by disclosing the exact semantic difference between the two result classes: errors mean the deck will not run, warnings mean it runs but the result is probably wrong. That is high-value behavioral context.

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 purpose in the opening clause, then a dense but purposeful enumeration of checks, and closed with the return semantics. The long list is justified by the breadth of validation, though the trailing '[bulc-mcp rules]' fragment is unexplained and slightly clutters the ending.

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 output schema, the description carries the burden of explaining returns, and it does so at the level of distinguishing errors from warnings. It stops short of describing the return structure (per-check IDs, messages, counts), which would be the last missing piece for a validator.

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 there is nothing for the description to disambiguate. Baseline of 4 applies; no parameter confusion is possible.

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?

Names a specific action (pre-flight validation) on a specific resource (the whole project) and enumerates the concrete checks performed — deck generation, mesh sanity, dangling references, T_END/output-interval mismatches, sprinkler profile combos. An agent can distinguish this from generic check tools at a glance.

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?

Explicitly states the trigger context: 'before export or run'. However, it never distinguishes itself from close siblings such as sim_preflight, bulc_check_deck, or bulc_plan_check, leaving the agent to guess which validation entry point to call.

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. 249 tool updatesv4.0.0
    • First observedadd_bndf
    • First observedadd_control
    • First observedadd_device
    • First observedadd_door
    • First observedadd_fire
    • First observedadd_floor
    • First observedadd_heat_detector
    • First observedadd_hole
    • First observedadd_material
    • First observedadd_material_from_library
    • First observedadd_nozzle
    • First observedadd_obstacle
    • First observedadd_prop
    • First observedadd_ramp
    • First observedadd_raw_namelist
    • First observedadd_slcf
    • First observedadd_smoke_detector
    • First observedadd_species
    • First observedadd_sprinkler
    • First observedadd_surface
    • First observedadd_surface_from_library
    • First observedadd_thermocouple
    • First observedadd_vent
    • First observedadd_wall
    • First observedadd_window
    • First observedarch_analyze_drawing
    • First observedarch_import_building
    • First observedarch_import_floorplan_report
    • First observedassign_surface
    • First observedauto_cutcell_mesh
    • First observedauto_fit_mesh
    • First observedauto_multimesh
    • First observedbulc_check_deck
    • First observedbulc_connection_status
    • First observedbulc_drawing_intake
    • First observedbulc_find_tools
    • First observedbulc_get_rules
    • First observedbulc_knowledge_search
    • First observedbulc_mesh_advisor
    • First observedbulc_plan_check
    • First observedcapture_view
    • First observeddraw_add_story
    • First observeddraw_list_stories
    • First observeddraw_remove_story
    • First observeddraw_set_door_params
    • First observeddraw_set_wall_params
    • First observeddraw_set_window_params
    • First observeddraw_update_story
    • First observedevac_add_agent
    • First observedevac_add_agents_batch
    • First observedevac_add_journey
    • First observedevac_add_stair
    • First observedevac_add_waypoint
    • First observedevac_clear_agents
    • First observedevac_get_results
    • First observedevac_list_summary
    • First observedevac_remove_agent
    • First observedevac_remove_journey
    • First observedevac_remove_stair
    • First observedevac_remove_waypoint
    • First observedevac_run
    • First observedevac_status
    • First observedevac_stop
    • First observedevac_update_agent
    • First observedevac_update_journey
    • First observedevac_update_setup
    • First observedevac_update_stair
    • First observedevac_update_waypoint
    • First observedfds_apply_text
    • First observedfire_compute_aset
    • First observedfire_results_summary
    • First observedfire_timeseries
    • First observedget_config_summary
    • First observedget_conventions
    • First observedget_furniture_info
    • First observedget_numerics
    • First observedget_object_properties
    • First observedget_project_summary
    • First observedget_simulation_metrics
    • First observedget_simulation_settings
    • First observedhvac_add_air_handler
    • First observedhvac_add_duct
    • First observedhvac_add_exhaust_grille
    • First observedhvac_add_node
    • First observedhvac_add_supply_diffuser
    • First observedhvac_apply_to_fds
    • First observedhvac_get_results
    • First observedhvac_list_summary
    • First observedhvac_remove_air_handler
    • First observedhvac_remove_duct
    • First observedhvac_remove_exhaust_grille
    • First observedhvac_remove_node
    • First observedhvac_remove_supply_diffuser
    • First observedhvac_run_calc
    • First observedhvac_set_defaults
    • First observedhvac_update_air_handler
    • First observedhvac_update_duct
    • First observedhvac_update_exhaust_grille
    • First observedhvac_update_node
    • First observedhvac_update_supply_diffuser
    • First observedlist_bndf
    • First observedlist_devices
    • First observedlist_furniture_catalog
    • First observedlist_geoms
    • First observedlist_material_library
    • First observedlist_meshes
    • First observedlist_obstacles
    • First observedlist_raw_namelists
    • First observedlist_slcf
    • First observedlist_surfaces
    • First observedlist_vents
    • First observedmerge_meshes
    • First observedoutput_add_tenability_slices
    • First observedplace_furniture
    • First observedpreview_fds
    • First observedproject_export_fds
    • First observedproject_info
    • First observedproject_new
    • First observedproject_open
    • First observedproject_redo
    • First observedproject_save
    • First observedproject_undo
    • First observedremove_bndf
    • First observedremove_control
    • First observedremove_device
    • First observedremove_fire
    • First observedremove_geom
    • First observedremove_hole
    • First observedremove_material
    • First observedremove_obstacle
    • First observedremove_prop
    • First observedremove_ramp
    • First observedremove_raw_namelist
    • First observedremove_slcf
    • First observedremove_species
    • First observedremove_surface
    • First observedremove_vent
    • First observedresult_add_graph_probe
    • First observedresult_clear_graph_probes
    • First observedresult_get_state
    • First observedresult_set_active_dataset
    • First observedresult_set_colormap
    • First observedresult_set_legend_range
    • First observedresult_set_particles
    • First observedresult_set_playback_speed
    • First observedresult_set_time
    • First observedresult_set_view_locked
    • First observedresult_toggle_playback
    • First observedresults_detect
    • First observedrun_simulation
    • First observedset_all_boundaries_open
    • First observedset_ambient
    • First observedset_chid
    • First observedset_fds_properties
    • First observedset_mesh
    • First observedset_mesh_cell_size
    • First observedset_meshes
    • First observedset_numerics
    • First observedset_open_boundary
    • First observedset_plot3d_outputs
    • First observedset_run_options
    • First observedset_simulation_mode
    • First observedset_time
    • First observedset_turbulence_model
    • First observedshape_add_arch
    • First observedshape_add_box
    • First observedshape_add_cone
    • First observedshape_add_cylinder
    • First observedshape_add_polygon_prism
    • First observedshape_add_revolve
    • First observedshape_add_sphere
    • First observedshape_add_torus
    • First observedshape_add_wedge
    • First observedshape_array
    • First observedshape_boolean
    • First observedshape_delete_node
    • First observedshape_edit_node
    • First observedshape_export_geom
    • First observedshape_export_obj
    • First observedshape_export_obst
    • First observedshape_export_stl
    • First observedshape_extrude_sketch
    • First observedshape_get_item_fds_props
    • First observedshape_get_tree
    • First observedshape_hull
    • First observedshape_import_mesh
    • First observedshape_mirror
    • First observedshape_new_document
    • First observedshape_preview_voxels
    • First observedshape_push_pull
    • First observedshape_register_item
    • First observedshape_screenshot
    • First observedshape_set_item_fds_props
    • First observedshape_set_params
    • First observedshape_transform
    • First observedshape_undo
    • First observedsim_log_tail
    • First observedsim_preflight
    • First observedsim_start
    • First observedsim_status
    • First observedsim_stop
    • First observedslice_mesh
    • First observedspr_add_drain
    • First observedspr_add_node
    • First observedspr_add_pipe
    • First observedspr_add_riser
    • First observedspr_add_sprinkler_head
    • First observedspr_add_water_source
    • First observedspr_analyze_drawing
    • First observedspr_apply_to_fds
    • First observedspr_auto_layout
    • First observedspr_design_review
    • First observedspr_export_results
    • First observedspr_get_results
    • First observedspr_import_fhc_bundle
    • First observedspr_import_network
    • First observedspr_insert_fitting
    • First observedspr_list_summary
    • First observedspr_pump_sizing
    • First observedspr_remove_node
    • First observedspr_remove_pipe
    • First observedspr_remove_sprinkler_head
    • First observedspr_remove_water_source
    • First observedspr_run_calc
    • First observedspr_set_defaults
    • First observedspr_set_head_spray
    • First observedspr_set_nozzles
    • First observedspr_set_pipes
    • First observedspr_set_valves
    • First observedspr_update_node
    • First observedspr_update_pipe
    • First observedspr_update_sprinkler_head
    • First observedspr_update_water_source
    • First observedspr_upsert_spray_profile
    • First observedtransform_obstacle
    • First observedupdate_control
    • First observedupdate_device
    • First observedupdate_dump_config
    • First observedupdate_fire
    • First observedupdate_hole
    • First observedupdate_material
    • First observedupdate_obstacle
    • First observedupdate_prop
    • First observedupdate_ramp
    • First observedupdate_reaction
    • First observedupdate_slcf
    • First observedupdate_surface
    • First observedupdate_vent
    • First observedvalidate_project

TDQS

B3/5.0

Scored across 249 tools

Disambiguation2/5

With 249 tools there is heavy functional overlap between modules: set_mesh / set_meshes / set_mesh_cell_size / auto_fit_mesh / auto_multimesh / auto_cutcell_mesh / slice_mesh / merge_meshes all manipulate the mesh, and add_obstacle vs shape_add_box vs add_wall vs add_floor vs place_furniture all create geometry. Convenience wrappers (add_sprinkler, add_heat_detector, add_device, add_prop) and dual undo tools (project_undo vs shape_undo) further blur boundaries, so an agent can easily misselect even though descriptions try to distinguish them.

Naming Consistency4/5

Names are overwhelmingly snake_case verb_noun with clear module prefixes (shape_, spr_, hvac_, evac_, draw_, arch_, result_, sim_, project_) and this convention holds across the whole set. Minor deviations exist: core model tools drop the prefix (add_obstacle, remove_vent, update_dump_config) while their cousins are prefixed, and a few names are noun-first (bulc_connection_status, get_conventions).

Tool Count1/5

249 tools is an extreme mismatch, far past the rubric's 50+ threshold and well beyond what an agent can reliably scan per session. Even though the server spans FDS modelling, shape studio, sprinkler, HVAC, evacuation, drawing import and results, the surface is so disaggregated that it should be split into several scoped servers.

Completeness5/5

Coverage is exhaustive: near-full CRUD for obstacles, vents, devices, materials, surfaces, meshes, sprinkler networks, HVAC, evacuation agents, outputs and simulation control, plus reading/preview/validation/results/knowledge and drawing-import paths. Almost no obvious dead ends remain across the many domains.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables LLMs to build, inspect, run, and analyze CFAST fire models step by step via tools for compartments, materials, vents, fires, devices, and surface connections, with simulation and result summaries.
    22
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables natural language-driven ANSYS simulations (Fluent, Mechanical, Geometry) with automatic TUI script generation for reproducibility.
    41
    6
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI assistants to create, edit, and simulate EnergyPlus building energy models via natural language. Supports schema exploration, model editing, simulation execution, and documentation search.
    39
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Turns an AI assistant into an OpenFOAM setup and debugging co-pilot, enabling case scaffolding, dictionary edits, mesh sizing, turbulence calculations, and solver log analysis through natural language.
    MIT