| name | massing-bim |
| description | Drive a Massing BIM/AEC project from an AI agent over MCP — read a project's status, records, CDE, KPI and model-quality checks; run standards-compliance, schedule-risk, embodied-carbon, permit- readiness and drawing-QA analyses; author the IFC model with GUID-stable recipes; and draft RFIs. Use when the user asks to inspect, analyse, or author a Massing project through Claude. |
Massing over MCP
Massing exposes an offline-first MCP server (services/api/mcp_server.py)
that lets you drive a real project through the same engines the web UI and HTTP API use — every read
is grounded in the project's own data and every write goes through the identical validation, guardrail,
and audit path. You never guess from memory; you call a tool and report what it returns.
Connect
pip install "mcp[cli]"
cd services/api
PYTHONPATH=src DATABASE_URL=postgresql://… python mcp_server.py
Claude Desktop (claude_desktop_config.json):
{ "mcpServers": { "massing": {
"command": "python",
"args": ["/path/to/services/api/mcp_server.py"],
"env": { "PYTHONPATH": "/path/to/services/api/src",
"DATABASE_URL": "postgresql://user:pass@host/db",
"AEC_RBAC": "1", "AEC_MCP_USER": "you@firm.com" } } } }
Set AEC_MCP_USER to the acting identity when AEC_RBAC=1: reads are then scoped to that user's member
projects and write tools require editor role — the agent can never do what the person couldn't.
Tools
| Tool | Kind | What it does |
|---|
list_projects | read | projects you can see (id + name) |
project_snapshot | read | cross-module status: RFIs, submittals, COs, punch, safety, schedule + budget KPIs, risk headline |
list_records | read | records of any module (rfi, submittal, information_container, schedule_activity, …) |
cde_status | read | ISO 19650 CDE container discipline |
bim_kpi_scorecard | read | the 10-category BIM KPI scorecard |
openbim_quality | read | LOIN / IDS / export-health / bSDD (needs a loaded model) |
standards_check | read | run iso19650 | cobie | ids | uniclass — clause-referenced findings + a readiness score |
list_recipes | read | the authoring-coverage matrix — every recipe run_recipe can drive, by category + IFC output |
schedule_risk | read | Monte Carlo P10/P50/P80/P90 completion, criticality index, delay drivers |
carbon_report | read | A1–A3 embodied carbon per element + Buy Clean limits + LEED inventory (needs a model) |
permit_readiness | read | submission-readiness over egress + approvability + code analysis + sheet coverage (needs a model) |
drawing_qa | read | drawing-set QA — duplicate/gap numbers, titleblock, issuance hygiene, model cross-checks |
create_rfi | write | create an RFI |
run_recipe | write | drive a GUID-stable authoring recipe (add_wall, add_column, set_pset, …), saving an audited version |
Workflows
Detailed, copy-ready playbooks live alongside this file:
draft-rfi.md — turn a coordination question into a well-formed RFI grounded in the model.
run-takeoff.md — pull quantities, cost and carbon signals for an estimate or a check.
drive-a-recipe.md — author the model safely: discover recipes, precheck params, apply, then publish.
Ground rules for the agent
- Read before you write. Snapshot the project (or list the relevant records) before creating an RFI
or editing the model, so your action references real GUIDs, sheet numbers, and current state.
run_recipe saves a new IFC version but does not reconvert. After a batch of edits, tell the user
the model needs a publish (the normal reconvert flow) for the viewer/index to reflect them.
- Author with GUID-stable recipes only. Never fabricate a GUID or hand-write IFC; call
list_recipes
to see what's available and run_recipe to apply it.
- Respect the compliance boundary. Money movement, KYC, and paid third-party bridges are deliberately
not exposed — don't try to route around them.
- Report the tool's own numbers. If a model isn't loaded, the analysis tools return a clear
"no model loaded" signal — surface that rather than inventing a result.