ifc-viewer-mcp
Uses OpenStreetMap data to render a real 3D basemap and surrounding city context, including buildings, roads, tunnels, metro, and water features.
Supports embedding the IFC viewer into WordPress sites alongside iframe and SDK embedding options.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
IFC Viewer Online
Open an IFC file and get a Health Score (0 to 100) in 30 seconds. Then put it on a map, measure it, compare it and turn it into a live digital twin.
A free IFC viewer, validator and digital-twin toolkit that runs entirely in your browser. No account. No file size limit. Your models never leave your machine.
→ Try it live · Demos · SDK docs · Blog
Read this in your language
English · 简体中文 · Español · Français · Deutsch · 日本語 · Português · Català · Italiano · ไทย

Health Score and Fix this first → a live city twin → sun and climate → point clouds → Clip Studio. All in your browser. Try it live →
In one sentence: drag in one IFC or a whole federated project, see it in 3D (on a real map if you want), get a Health Score with the issues to fix first, fix the common ones in a click, measure and compare versions, and export a corrected file, BCF or report. Nothing is uploaded to a server.
Contents
Related MCP server: Revit Converter MCP
What it does
Check and fix models
Capability | What you get |
IFC Health Check | 44 validation rules streamed live from a Web Worker, summarized as one Health Score (0–100), with a Fix this first list right under the score and Show in 3D on every row. |
One-click fixes | A browser engine that fixes missing types, renames every duplicate or empty name in one go, and suggests the real class for |
Fix guides | Step-by-step remediation per rule for Revit, ArchiCAD, Tekla and Allplan. The guide opens on the tool the model was exported from. Also published as static |
buildingSMART IDS 1.0 | Load an |
EIR profiles and requirements | Build an Exchange Information Requirements profile (or import it from an Excel template) that compiles to IDS, and share a requirements link with suppliers. |
Version compare | Compare sets of IFCs between deliveries by GlobalId, check that IDS compliance did not regress, and sync the BCF issue list. See |
Non-destructive editor | Edit properties, fix GUIDs, rename elements. Every change is a diff with undo/redo; the corrected IFC is written in a worker. |
BCF 2.1 / 3.0 | Import, create and comment topics in a BCF panel; viewpoints, measurements and validation findings travel inside the issue. Works with Navisworks, BIMcollab, Solibri and any BCF-compatible CDE. |
Reports | Shareable, crawlable report links, a verifiable certificate, COBie export and validation export to JSON / CSV / BCF. |
View, measure and present
Capability | What you get |
Federation | Drop a whole project at once: many IFCs, folders, ZIP, RAR or 7z. A federation bar groups models by discipline, with colour, opacity, versions and saved views. Every load is a queued job you can follow, cancel or retry. |
Coordinates | Models with UTM coordinates in their vertices, or a local model next to a georeferenced one, are lined up through |
Measure | Distance, area, angle, clearance and shortest gap; CAD dimensions (aligned, chain, baseline, level, radius, arc, angular, ordinate, leaders) with polar tracking and snaps; quantity takeoff with pass/fail requirements; routes on foot, by bike or by car inside buildings and across the city ( |
Explore | Spatial tree and scene tree, section cuts, 2D floor plans, walk mode, arrow-key navigation, SSAO, edges and bloom. |
Present | Guided issue tours, a presentation director, screenshot / GIF / MP4 capture with a clip editor, a cover studio with 20 templates, and a client mode for showing a model to someone who does not use BIM tools. |
OPFS cache | Parsed geometry is cached in the browser's private file system, so reloads skip conversion. |
Mobile | Bottom sheets for every panel, a floating nav and touch controls down to 320 px, with a lighter scene on phones. |
10 languages | EN · ES · FR · DE · PT · JA · CA · ZH · IT · TH |
Supported IFC versions: IFC2x3 · IFC4 · IFC4x1 · IFC4x3
Maps, reality capture and digital twins
Capability | What you get |
3D map | Place a georeferenced model on a real basemap with 3D terrain and the surrounding city from OpenStreetMap and Overture: buildings with real roofs and facades, roads, tunnels and metro, water with tide and currents. See |
Add data | One door for everything that is not the IFC: point clouds (LAS/LAZ/COPC/PLY/PCD/XYZ/E57), meshes, GeoJSON/WFS layers, live feeds, 3D video, IDS, BCF and documents. See |
Analyses | Sun and shadow studies with real weather files, 2D flood simulation on the GPU, and rain-triggered slope hazard. See |
Digital twins | Devices that colour IFC elements over WebSocket, alerts and history, live open data, and shareable scene documents ( |
Some of these modules are behind build flags (VITE_FEATURE_GIS, VITE_FEATURE_POINTCLOUD, VITE_FEATURE_MESH, VITE_FEATURE_VIDEO, VITE_FEATURE_SOLAR, VITE_FEATURE_FLOOD, VITE_FEATURE_HAZARD). See docs/DEPLOYMENT.md.
See it in action
Every clip is the real app running in a browser, with no edited footage. The first three and the header's opening use the open Duplex Apartment reference IFC (7,131 elements); the rest use the Barcelona reference models in
public/models/. Re-record them withscripts/gif/capture.mjs,scripts/gif/features.mjsandscripts/gif/flood-frames.mjs, thenscripts/gif/encode.mjs/scripts/gif/montage.mjs(the header GIF).
Navigate the model and inspect IFC properties

Step through every issue in 3D
After validation, Show in 3D opens a bar that walks the issues one by one, with the elements highlighted on the model.

Export the results
A full JSON report, a CSV for Excel, a signed certificate, BCF, a one-page delivery report or a COBie workbook, all written in the browser.

Sun and climate analysis
One link loads the model, reads the site's real climate (ERA5) and paints the passive sun impact on every facade, hour by hour.

Rain and flooding on the map
The Hotel Vela on Barcelona's real relief, with the city around it: a 2-hour storm runs as a 2D flood simulation on the GPU, then the maximum depth it left.

Point clouds next to the IFC
A construction-progress scan aligned with the IFC it surveys, in the same scene.

A city digital twin from one scene file
?scene= opens eight IFC models in Plaça de Catalunya, Barcelona, on the city map with live open data.

Clip Studio
Generate a presentation from the model (storeys, systems, findings) and edit it into a clip for LinkedIn, Reels or TikTok.

Embed it: iframe, SDK, WordPress
Put the viewer in a blog, a CDE panel, a dashboard or an internal tool. The model is parsed in the visitor's browser, nothing is uploaded.
1. Iframe and URL params
<iframe src="https://www.ifcvieweronline.eu/?model=https://your-cde.com/model.ifc&embed=1"
width="100%" height="600" style="border:0" allow="fullscreen"></iframe>model (comma-separated for federated sets), scene, embed, ui (minimal · full · kiosk · client · article), validate, select, isolate, lang and more. Full reference: docs/EMBED_URL_PARAMS.md.
2. JS SDK (v1.18): mount the viewer and stream IFC bytes from your own app, with no public URL and no CORS.
<div id="viewer" style="height:520px"></div>
<script type="module">
import { IfcViewer } from "https://www.ifcvieweronline.eu/sdk/ifc-viewer.es.js";
const viewer = new IfcViewer("#viewer");
const bytes = await fetch("/models/project.ifc").then(r => r.arrayBuffer());
await viewer.add("project.ifc", bytes); // parsed client-side
viewer.on("element-selected", (e) => console.log(e.ifcType, e.expressId));
</script>A small, dependency-free ES module (iframe + postMessage). It can read stats, issues and validation results, take screenshots, run an IDS check (checkIds(idsXml)), drive scenes, layers and devices, and listen for ready, model-loaded, validation-completed and element-selected. Reference: docs/IFC_VIEWER_SDK.md · live docs at /sdk/.
3. WordPress: a plugin to embed the viewer in posts and pages, in integrations/wordpress/.
How it works
The whole pipeline lives in the browser. Every load is a job in one loading queue. IFC files are converted in a Web Worker with WebAssembly, rendered with Three.js, and validated in another worker. Nothing about your model is sent to a server of ours. Map tiles and open-data layers are fetched by the browser straight from each provider, and only after you agree to it.
flowchart TD
subgraph BROWSER["Your browser: the model never leaves this boundary"]
UI["React 18 UI<br/>Tailwind · Radix · Zustand"]
QUEUE["Loading queue<br/>jobs · phases · cancel · retry"]
VIEWER["Viewer (Three.js)<br/>federation, map, twins"]
CACHE[("OPFS cache<br/>reloads skip conversion")]
subgraph WORKERS["Web Workers (WebAssembly)"]
PARSE["ifc-parser<br/>IFC → fragments"]
VALID["validator<br/>44 rules + spatial tree"]
FIX["autofix · export<br/>apply fixes and diffs → IFC"]
IDS["ids<br/>IDS 1.0 check"]
MORE["bcf-parser · snapshot · point-cloud<br/>geo-extract · geo-terrain · geo-buildings<br/>basemap-paint · gif-export"]
end
end
FILE["📄 drop .ifc, folders, zip, data"] --> UI
UI --> QUEUE
QUEUE <-->|hit / miss| CACHE
QUEUE --> PARSE
PARSE -->|fragments| QUEUE
QUEUE -->|fragments| VIEWER
UI --> VALID
VALID -->|streamed issues + Health Score| UI
UI --> FIX
FIX -->|corrected .ifc| DL["⬇ download"]State: small Zustand stores in
src/stores/; geometry never enters a store, only stable IDs do.Worker boundaries: every worker message is checked at runtime with Zod schemas (
src/lib/worker-schemas.ts).Deep dives:
ARCHITECTURE.md(data flow),docs/MODEL_LOADING.md(queue, scheduler, cache),DECISIONS.md(why things are the way they are).
Tech stack
Layer | Technology |
IFC parsing | web-ifc (WebAssembly) |
3D rendering | Three.js + @thatopen/components / fragments |
Maps | 3d-tiles-renderer, OpenFreeMap vector tiles, OpenStreetMap / Overture data |
UI | React 18 + Tailwind CSS + Radix UI, Framer Motion + GSAP |
State | Zustand 5 |
i18n | i18next (10 languages) |
Analytics | PostHog EU, cookieless, no PII, opt-out respected |
Build / tests | Vite 6 + TypeScript (strict) · Vitest |
Deploy | Vercel (static) · Cloudflare Worker for share links and contact forms (never sees the model) |
Getting started
Requirements: Node.js 20+ and npm.
git clone https://github.com/j03rul4nd/ifc-viewer-online.git
cd ifc-viewer-online
npm install
npm run dev # → http://localhost:3000The dev server sends Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp, which multithreaded WASM (SharedArrayBuffer) needs.
Command | What it does |
| Dev server on port 3000 ( |
| Vitest suite |
| Type check |
| SDK + embed pages + type check + production build into |
| Only the SDK and its docs ( |
| Pre-compute |
| Rebuild demo assets with Blender 4.5 ( |
The build bundles Three.js and
@thatopen/*into worker chunks and needs a lot of memory; thebuildscript already raises the Node heap to 6 GB. You can also self-host with theDockerfile/docker-compose.yml(nginx). Seedocs/DEPLOYMENT.md.
Project structure
src/
components/ # UI: Viewer, Toolbar, ValidationPanel, IdsPanel, BcfPanel, GeoPanel, ScenePanel, …
# + measure/ compare/ data/ geo/ pointcloud/ solar/ eir/ requirements/ mobile/ blog/ twin-builder/ …
workers/ # ifc-parser · validator · autofix · export · ids · bcf-parser · snapshot · point-cloud · geo-* · basemap-paint · gif-export
stores/ # Zustand stores (model, scene, validation, editor, loading, bcf, ids, geo, measure, …)
hooks/ # useModelSession, useValidationRunner, useIdsRun, useElementFocus, …
lib/ # viewer.ts · loader.ts · validator.ts · diffStore.ts · worker-schemas.ts
loading/ # load queue, scheduler, convert pool, cache, drop plans
ids/ eir/ autofix/ compare/ certify/ cobie/ # checking, fixing, comparing, reporting
measure/ route/ plans/ # measuring, dimensions, takeoff, routes
geo/ pointcloud/ mesh/ video/ solar/ # map, reality capture, analyses
twin/ scene/ scene-doc/ layers/ connections/ # digital twins and scene documents
capture/ director/ cover/ presentation/ tour/ # capture and presentations
sdk/ # IfcViewer embeddable SDK (built to public/sdk/)
i18n/ locales/ # i18next config + JSON per locale
types/ # Zod schemas + TypeScript types (ValidationRules, RULE_COUNT, …)
public/ # static landings, /fix/ and /blog/ pages, demo models, scenes, SDK build
scripts/ # SEO generators, blog i18n, covers, Blender asset builders, SDK docs
cf-worker/ # Cloudflare Worker: share-link SSR and contact forms (never sees the model)
integrations/ # WordPress plugin
test/ # fixturesDocumentation map
Start with these:
Doc | Read it for |
How the app is put together and how data flows | |
Architecture decisions (D-xx) and the rules they set, e.g. frontend-only | |
Glossary and product context | |
IFC concepts the code relies on | |
How to send a change | |
Index of every doc in |
The 44 validation rules
Rules run in src/workers/validator.worker.ts, gated by a RulesConfig. The count lives in one place, RULE_COUNT in src/types, and a test fails if any doc quotes a different number. (This is separate from the buildingSMART IDS check, which runs your own .ids file.)
RULE_EMPTY_NAME · RULE_EMPTY_LONGNAME · RULE_DUPLICATE_NAME · RULE_NAMING_CONVENTION · RULE_MISSING_TYPE · RULE_DUPLICATE_GUID · RULE_MISSING_PROPERTY_SET · RULE_ORPHAN_ELEMENT · RULE_WRONG_CONTAINER · RULE_BROKEN_AGGREGATE · RULE_INVALID_GUID_FORMAT · RULE_SPATIAL_HIERARCHY · RULE_CIRCULAR_REFERENCE · RULE_EMPTY_PROPERTY_VALUE · RULE_MISSING_MATERIAL · RULE_ELEMENT_IN_BUILDING · RULE_INVALID_IFC_VERSION · RULE_ELEMENT_CLASH (off by default)
RULE_MISSING_PROJECT · RULE_MISSING_BUILDING · RULE_MISSING_STOREY · RULE_EMPTY_STOREY · RULE_FILE_DESCRIPTION_MISSING · RULE_FILE_AUTHOR_MISSING · RULE_PROJECT_LONGNAME_MISSING · RULE_STOREY_ELEVATION_MISSING · RULE_ISO19650_PROJECT_INFO · RULE_ISO19650_AUTHOR_INFO · RULE_ISO19650_FILENAME
RULE_MISSING_CLASSIFICATION · RULE_LOD_PSET_MISSING · RULE_LOD_QUANTITY_MISSING · RULE_LOD_MATERIAL_LAYER_MISSING · RULE_MEP_SYSTEM_MISSING · RULE_CLASH_MEP_STRUCTURAL · RULE_PROXY_OVERUSE · RULE_COORDINATE_OFFSET · RULE_FILE_SIZE_ANOMALY
RULE_OPENING_WITHOUT_HOST · RULE_STOREY_ELEVATION_DUPLICATE · RULE_STOREY_ELEVATION_ORDER · RULE_UNIT_CONSISTENCY · RULE_SPACE_AREA_MISSING · RULE_CONNECTED_MEP
The Health Score is a logarithmic, diminishing-returns number derived from the weighted severity of all issues (errors such as duplicate GUIDs, warnings such as missing property sets, info such as proxy overuse).
Contributing
New validation rules, translations and bug fixes are especially welcome. Read CONTRIBUTING.md first.
Add a validation rule (src/workers/validator.worker.ts):
Add the rule ID to
ValidationRulesand its metadata insrc/types/index.tsImplement the
asyncrule: it receives theIfcAPIinstance,modelIdand aSpatialIndexhelper and returnsValidationIssue[]Wire it into the
runAllRulesdispatch and setDEFAULT_RULES[RULE_ID]Add i18n strings to
RULE_TRANSLATIONSRun
npm test:src/lib/rule-count.test.tslists every page and README that still quotes the old rule count
Add a translation: copy src/locales/en/ to a new locale folder, translate the values, and register it in src/i18n/config.ts.
Before opening a PR: npm test and npx tsc -b.
Open source, free and paid
The rules we follow
Everything that is free in the browser today stays free, forever. Nothing is taken away from anyone.
What costs a server is paid: storage, server processing, bandwidth, hosted APIs.
New professional productivity tools (for example batch work across many files) may launch in a paid plan, even when they run in the browser.
The free plan gets nothing that runs on our servers, so it never depends on an account or a quota.
Free, open source (MIT, this repo)
The viewer, the 44-rule validator and Health Score, one-click fixes and fix guides, buildingSMART IDS, EIR profiles, the editor and IFC export, BCF import/export, version compare, measuring and takeoff, sections and floor plans, capture and presentations, the 3D map, point clouds and data layers, solar / flood / slope analyses, digital twins and scene documents, the JS SDK, iframe embedding and the WordPress plugin. All of it runs in your browser, with no account.
Paid plans (planned, not live yet)
Plan | For | What it adds |
Pro | One person | Large files processed on the server, cloud projects with versions and "what changed", private links for clients (expiry, password), cloud BCF issues with free guests, verifiable certificates with your logo |
Team | Studios and engineering firms (from 3 editors; reviewers and guests free) | A shared BCF issue manager, automatic validation on every upload that turns failures into assigned issues, a company standard (EIR/IDS profiles, naming), a client portal with your logo, a publishing gate with audit log, monthly reports |
Reception | Contractors, developers, owners and FM teams who receive models | Publish your requirements as a link; suppliers check and fix for free in their browser and deliver through it; you get an inbox of what passed, what failed and who delivers well |
Developer | Platforms and CDEs | Hosted validation API, billed by use |
Enterprise | Large contractors and public bodies | Reception across a portfolio, SSO, DPA, SLA and isolated / on-premise deployment |
Not everything is in this repo. The paid plans are built on private, closed-source code: the cloud backend and API, accounts and billing, storage, server processing and the team workspace. That code lives in private repositories and is not covered by the MIT license. Some paid screens exist here only as hidden UI behind flags; they do nothing without the private backend. This repo is the full free product, not the whole company.
License
The code in this repository is MIT: fork it, self-host it, use it commercially.
Author
If this project saved you time, a ⭐ helps other BIM people find it.
Built with @thatopen/components, web-ifc and Three.js.
Available Tools
10 toolscheck_idsCheck an IFC file against IDS requirementsARead-only
Check an IFC model against an IDS file (buildingSMART Information Delivery Specification 1.0) and return, per specification, pass/fail, how many elements applied, passed and failed, and the first failures with the element and the reason. Runs locally; nothing is uploaded. Use it when the user has an .ids file, or exchange requirements to verify a delivery against.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | The IDS: local path, public URL, or the IDS XML text itself. | |
| ifc | Yes | The IFC model: local path or public http(s) URL. | |
| maxFailures | No | Failures to list per specification. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint=false, so the safety profile is known; the description reinforces it with 'Runs locally; nothing is uploaded,' which is meaningful for a tool whose inputs may be URLs. It also discloses the response contents (per-specification pass/fail, applied/passed/failed counts, first failures with element and reason), which matters because there is no output schema. Not exhaustive on limits (e.g. size ceilings or runtime), but well beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the operation and result, then the usage trigger. The parenthetical IDS expansion earns its place by disambiguating an acronym, and there is no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description carries the return-value burden and does so at an appropriate level — structure and failure detail are stated. Inputs, locality, and purpose are all covered for a three-parameter tool. It leaves open how sibling validate_ifc differs and any practical limits on large IFC files, which keeps it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents all three parameters including accepted forms for ids and ifc and the maxFailures default. The description adds only an oblique reference to 'the first failures', which gestures at maxFailures without explaining its effect. Baseline 3 is the right ceiling 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource pair: check an IFC model against an IDS file, with the standard spelled out (buildingSMART IDS 1.0). It also names the return shape, so the agent knows what it gets back. It does not differentiate itself from the sibling validate_ifc, which is the only gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger: 'Use it when the user has an .ids file, or exchange requirements to verify a delivery against.' That is a clear context for selection. It falls short of explicit exclusions or a routing rule versus validate_ifc, so an agent facing both siblings must still infer which one applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_digital_twinsList live digital twin scenesARead-only
List the ready-made city digital twins (Barcelona, Helsinki, Tokyo): georeferenced IFC models on terrain and the OpenStreetMap city, painted with live open data (bikes, EV chargers, traffic, air quality, trains). Each has a link and an embed link. Also returns the link to the twin builder, where the user builds their own twin (AGV warehouse, import tracking) from a CSV or live feed. Use it when the user asks for a digital twin demo or wants to start one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds real behavioral value by disclosing the return shape (per-twin link and embed link, plus a builder link) and the data layers behind each twin. It does not contradict either annotation. It could still say more about link validity or whether the builder link requires auth, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each doing work: catalog contents, return shape, and usage trigger, with the core resource front-loaded. The parenthetical data-source list is slightly long but is genuinely informative about what the twins show.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the burden of describing returns, and it does so (links, embed links, builder link). Read-only behavior is confirmed by annotations. The only gap is that it does not say whether results are static/constant or whether the builder link is account-bound.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to compensate for. The description correctly implies a fixed, unfiltered catalog rather than suggesting any filtering options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List the ready-made city digital twins'), names the concrete instances (Barcelona, Helsinki, Tokyo), and enumerates what each entry contains (IFC models, OSM city, live open-data layers, links). No sibling tool in the list does anything similar, so an 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states an explicit trigger: 'Use it when the user asks for a digital twin demo or wants to start one,' and covers the adjacent builder use case. It stops short of naming an alternative tool or stating when not to use it, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_validation_rulesList the IFC validation rulesARead-only
List every rule validate_ifc can run: its id, category, severity and whether it is on by default. Use it to pick rules for validate_ifc or to explain what a rule checks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and openWorldHint=false already declared, the description adds value by disclosing the shape of the returned records (id, category, severity, default-enabled) and that the list covers the built-in rule catalog. It stops short of stating whether the list can change between calls or how large it is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste: the first states what is listed and what comes back, the second states why you would call it. The return-field list is front-loaded before the usage advice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing return values — it does so by naming the four fields. Combined with read-only annotations and a zero-parameter schema, 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.
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 the schema could document and the description correctly implies a parameterless full dump. It adds no misleading filter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List every rule validate_ifc can run') and immediately enumerates the fields returned (id, category, severity, default-on). It also names the sibling tool whose rule set is being listed, so the agent can distinguish it from validate_ifc or check_ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives two concrete use cases: pick rules to pass to validate_ifc, or explain what a rule checks. That is clear positive guidance, though it does not state when not to call it (e.g. that it is unnecessary if you already know the rule ids).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_3d_sketchOpen the 3D sketch studioARead-only
Link to the 3D sketch studio: draw strokes in 3D space with a pen, finger or mouse — over a blank canvas or around a model — on a phone, tablet, foldable or desktop, and export to SVG, PSD, ORA or Blender. Free, in the browser, no account. Use it when the user wants to sketch an idea, mark up a design in 3D or make a concept drawing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context — free, runs in the browser, no account required — which tells the agent there are no auth prerequisites. It does not say what the tool returns (a URL to present to the user) or what happens after invocation, which is the main behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and usage sentence are appropriately front-loaded, but the middle is padded with device and export-format marketing detail ('phone, tablet, foldable or desktop... SVG, PSD, ORA or Blender') that does little to help an agent decide whether to call it. Roughly half the text could be cut without losing selection signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining the return value — yet it never states that the tool returns a link/URL that should be surfaced to the user. It also never mentions the openWorldHint=false caveat in relation to launching an external site. Adequate for a zero-parameter tool, but an agent is left guessing what it actually receives back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there are no parameter semantics to explain; the baseline for a no-parameter tool applies. Nothing in the description misrepresents the input surface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause 'Link to the 3D sketch studio' names the resource and the action (hand back a link to a sketching studio), and the following clause clarifies what the studio does. An agent can distinguish it from model-inspection siblings like open_in_3d_viewer or read_dxf, though the description never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete triggering condition: 'Use it when the user wants to sketch an idea, mark up a design in 3D or make a concept drawing.' That is clear when-to-use guidance. It stops short of exclusions — nothing says when NOT to use it versus open_3d_viewer or open_drawings, so the 5 tier is not reached.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_drawingsOpen technical drawings next to a modelARead-only
Build a link that opens IFC models with the drawings pane beside the 3D view and a floor plan already cut from the model. In that pane the user can also drop DXF or PDF drawings, place them over the model, calibrate the scale, compare plan against model, add dimensions and text, and export to DXF, SVG or PDF. Use it when the user wants a 2D plan, to check a drawing against the model, or to mark up a sheet.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Interface language: en, es, ca, fr, de, it, pt, ja, zh or th. | |
| models | Yes | Public http(s) URLs of IFC files. Several URLs load together as one federated scene. Local paths do not work here: the browser has to download the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint=false, so the description's disclosure that the tool 'builds a link' (i.e. returns a URL rather than data) is genuinely additive, as is the note that several URLs load as one federated scene. It omits caveats like link lifetime or whether opening requires an account, which keeps it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core capability is front-loaded in the first sentence and the usage triggers follow. The middle sentence becomes a long inventory of pane features (calibrate, dimensions, export formats) that a caller selecting the tool does not strictly need, costing some tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description covers the essential unknowns: it produces a link, loads multiple models as a federated scene, and the browser must download the files. Missing details about the returned link's form or lifespan are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the lang enum values and the public-URL constraint on models are already documented in the schema. The description adds nothing about parameter behaviour 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb+resource: it 'builds a link that opens IFC models with the drawings pane beside the 3D view'. That is specific enough to distinguish it from the sibling open_in_3d_viewer, though it never names the alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit triggers — 'when the user wants a 2D plan, to check a drawing against the model, or to mark up a sheet' — which is clear usage context. It stops short of exclusions (e.g. when to use open_in_3d_viewer instead), so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_in_3d_viewerOpen IFC models in the 3D viewerARead-only
Build a link that opens one or more public IFC files in the free IFC Viewer Online 3D viewer (runs in the browser: orbit, section, measure, properties, validation with Health Score badge). Optional: drop them on the city map, isolate a class, pick a camera view, open a floor plan in the drawings pane, add point clouds. Also returns an to embed the same view in a web page, wiki or dashboard. Use it whenever the user wants to see, show, share or embed a model in 3D. Give the link to the user to click; this tool does not open a window by itself.
| Name | Required | Description | Default |
|---|---|---|---|
| ui | No | Interface preset: full (all panels), minimal, kiosk (no chrome), client (read-only for clients), article (for embedding in pages). | |
| map | No | Place the models on the 3D city map at their own georeference. | |
| lang | No | Interface language: en, es, ca, fr, de, it, pt, ja, zh or th. | |
| view | No | Camera view once the models load. | |
| scans | No | Public point-cloud URLs (LAS/LAZ/E57/PLY…) to load with the models. | |
| models | Yes | Public http(s) URLs of IFC files. Several URLs load together as one federated scene. Local paths do not work here: the browser has to download the file. | |
| isolate | No | Show only this IFC class, e.g. IfcWall, IfcDoor, IfcSpace. | |
| validate | No | Run validation after loading (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only declare readOnlyHint and openWorldHint; the description adds behavior the agent could not otherwise know: the result is a URL plus an embeddable <iframe>, the tool does not launch a viewer itself, and the models must be public http(s) URLs because the browser does the download. It also lists what the viewer does after load (orbit, section, measure, validation), which frames the side effects that occur downstream.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and output are front-loaded in the first sentence, with usage routing at the end. The parenthetical feature inventory ('orbit, section, measure, properties, validation with Health Score badge') and 'free IFC Viewer Online' branding are the least load-bearing parts and could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description supplies what is missing elsewhere: what is returned (a link and an iframe), that the tool is a link-builder rather than a launcher, and the public-URL constraint on inputs. Nothing an agent needs in order to call it correctly or explain the result to a user is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description maps several parameters to user-visible outcomes in plain language: 'drop them on the city map' (map), 'isolate a class' (isolate), 'pick a camera view' (view), 'add point clouds' (scans), and the drawings pane. It also reinforces the federated-scene behavior of the models array. Only the ui presets and validate are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource: 'Build a link that opens one or more public IFC files in the ... 3D viewer.' It is far more precise than a tautology, and it also states the output shape (a link plus an <iframe>). It never names a sibling tool, though, so the boundary with open_3d_sketch or open_drawings has to be inferred from the 'see, show, share or embed in 3D' framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it whenever the user wants to see, show, share or embed a model in 3D' gives a clear triggering condition, and the closing note that the link must be handed to the user (no window opens) sets an important usage expectation. There is no explicit when-not or named alternative, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_dxfSummarise a DXF drawingARead-only
Read a DXF drawing (ASCII, R12 to current) and summarise it: DXF version, units, layers with how many entities each, entity types, drawing extents and the text found on it (room names, labels, title block). Runs locally. Use it to tell what a drawing contains before placing it next to a model with open_drawings. DWG is detected but not read: ask the user to save it as DXF.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Path to a local file (absolute, or relative to where the server runs) or a public http(s) URL. | |
| maxTexts | No | How many text strings to return. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false; the description reinforces this with 'Runs locally' and adds supported format scope (ASCII, R12 to current) plus graceful DWG detection. The one gap is that the schema allows http(s) URLs, so the 'runs locally' framing does not mention that remote sources are fetched, which is a behavioral detail an agent would want.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the capability and output contents, then usage, then the edge case. No sentence is redundant and the DWG caveat is placed last where it is least disruptive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of enumerating return values and does so thoroughly. The only shortfall is that it does not mention URL-based sources despite the schema permitting them, which is a small omission for a tool whose remote behavior is otherwise described as local.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `source` and `maxTexts` are already documented in the schema; baseline 3 applies. The description's mention of 'the text found on it (room names, labels, title block)' gives useful context on what maxTexts governs but adds no new syntax or limits beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read/summarise a DXF drawing) and enumerates exactly what the summary contains: DXF version, units, per-layer entity counts, entity types, extents and extracted text. It is clearly distinguishable from the sibling open_drawings, which is named as the downstream placement step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('to tell what a drawing contains before placing it next to a model with open_drawings') and what to do when the input is unsupported ('DWG is detected but not read: ask the user to save it as DXF'). Both the positive case and the fallback are stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fiware_entitiesRead entities from a FIWARE context brokerARead-only
Read entities from a FIWARE context broker (Orion, Orion-LD, Scorpio, Stellio) over NGSI-LD or NGSIv2 and return them as flat records (id, type, each attribute value with its unit, lat/lon, observedAt) — the same shape the viewer's twin panel binds to IFC elements. The request goes from this machine straight to the broker. Use it to see what live data a broker offers before linking it to a model.
| Name | Required | Description | Default |
|---|---|---|---|
| api | No | ld = NGSI-LD, v2 = NGSIv2. | ld |
| type | No | Entity type, e.g. AirQualityObserved, ParkingSpot. NGSI-LD needs one. | |
| limit | No | How many entities to return. | |
| broker | Yes | Broker root, e.g. https://orion.example.com:1026 | |
| tenant | No | NGSILD-Tenant / Fiware-Service, if the broker uses one. | |
| context | No | JSON-LD @context URL (NGSI-LD), for short attribute names. | |
| servicePath | No | Fiware-ServicePath (NGSIv2 only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful context beyond that: the request goes directly from this machine to the broker (network egress, no intermediary), and results are flattened into a specific record shape. It does not discuss auth requirements or error behavior, keeping it at a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and resource, then the return shape, then the usage cue. Dense but each sentence carries information; the parenthetical broker list is slightly verbose but justified for disambiguation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the flat record shape (id, type, attribute values with units, lat/lon, observedAt). Combined with full schema coverage for the 7 parameters, an agent has enough to call it correctly; only auth/error handling is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema. The description only implicitly maps to the api parameter by mentioning NGSI-LD and NGSIv2, adding no syntax or format detail beyond the structured fields. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read entities from a FIWARE context broker'), names the concrete broker implementations and protocols, and describes the returned shape. An agent can distinguish it from siblings like list_digital_twins or validate_ifc 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it 'to see what live data a broker offers before linking it to a model', which gives a clear triggering context. It does not name an alternative tool or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_port_librarySearch the Port de Barcelona IFC libraryARead-only
Search the Port de Barcelona BIM object library (cranes, bollards, fenders, signs, buildings… IFC, CC BY 4.0) by words and category. Each hit has its IFC download URL and a link that opens it in the 3D viewer. Use it when the user needs port or maritime infrastructure objects for a model or twin.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Words to look for in the object name, e.g. "grua", "bolardo", "crane". Empty lists everything. | |
| category | No | Only this category (the answer lists them). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by disclosing what a hit contains (an IFC download URL plus a 3D viewer link) and the licensing terms. It omits pagination behavior and result-count semantics for the 'limit' parameter, which keeps it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the what/where and closing with the when-to-use rule. The parenthetical object-type list and format/license tags are dense but informative rather than filler; a truncation of the abbreviation list would be the only gain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-param, zero-required, read-only search tool with no output schema, the description covers purpose, domain scope, trigger condition, and the shape of returned hits. The only material gap is category discovery — the agent learns categories are 'listed in the answer' only after a first call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: the 'query' parameter is well documented in-schema and 'category' is only hinted at ('the answer lists them'), while 'limit' has no description at all. The description restates the two search axes ('by words and category') but adds no enumeration of categories or syntax details, so it neither compensates for nor worsens the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Search the Port de Barcelona BIM object library') and enumerates the domain contents (cranes, bollards, fenders, signs, buildings; IFC, CC BY 4.0). No sibling tool does library search, so an agent can route to it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the trigger condition: 'Use it when the user needs port or maritime infrastructure objects for a model or twin.' It does not enumerate alternatives or when-not conditions (e.g. versus validate_ifc or open_in_3d_viewer), but the sibling set is functionally distinct enough that this is clear context without exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_ifcValidate an IFC file and get its Health ScoreARead-only
Check an IFC (BIM) model against the IFC Viewer Online rule set — schema, spatial structure, names, GlobalIds, ISO 19650, classification, MEP and more — and return its Health Score (0–100, higher is better), issue counts, the rules that cost the most points and the first issues with links to fix guides. Runs locally on this machine; the file is not uploaded anywhere. Use it when the user asks whether a model is OK, what is wrong with it, or how good it is.
| Name | Required | Description | Default |
|---|---|---|---|
| rules | No | Run only these rule ids (see list_validation_rules). Default: the viewer's default rules. | |
| source | Yes | Path to a local file (absolute, or relative to where the server runs) or a public http(s) URL. | |
| maxIssues | No | How many issues to list (the counts always cover all of them). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond readOnlyHint/openWorldHint by declaring local execution and that 'the file is not uploaded anywhere' — a material privacy/behavior trait an agent would otherwise have to guess. It also previews the response shape (0–100 score, issue counts, highest-cost rules, first issues with fix-guide links), so the agent knows what comes back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the return value, then privacy, then the trigger condition — a sensible order. Slightly long due to the rule-category enumeration, but each clause carries information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so adequately (score, counts, costly rules, sample issues, fix links). It is nearly complete for a read-only validation tool; missing only edge behavior such as unparsable files or runtime expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, including the list_validation_rules cross-reference and the 'counts always cover all of them' note for maxIssues. The description adds little parameter-level meaning beyond restating that issues are truncated to 'the first issues'; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check an IFC (BIM) model against the ... rule set') plus the distinguishing output, a Health Score. Adjacent siblings such as list_validation_rules and check_ids are clearly different activities, and the enumerated rule categories (schema, spatial structure, GlobalIds, ISO 19650) make the scope concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggering conditions: 'Use it when the user asks whether a model is OK, what is wrong with it, or how good it is.' It also implicitly routes rule discovery to list_validation_rules via the 'rules' parameter. It stops short of naming when-not-to-use or contrasting itself with check_ids, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
- First observed
check_ids - First observed
list_digital_twins - First observed
list_validation_rules - First observed
open_3d_sketch - First observed
open_drawings - First observed
open_in_3d_viewer - First observed
read_dxf - First observed
read_fiware_entities - First observed
search_port_library - First observed
validate_ifc
This server cannot be deployed
TDQS
Scored across 10 tools
Each tool targets a distinct resource or action: rule-set validation vs IDS checking, 3D viewer vs drawings pane vs 3D sketch studio, DXF reading vs FIWARE reading vs object-library search. The closest overlaps are validate_ifc vs check_ids (both 'validate a model') and the three open_* link builders, but the descriptions make the boundaries clear enough that an agent should pick correctly.
All names are snake_case verb_noun (validate_ifc, list_validation_rules, read_dxf, search_port_library), which is predictable. Minor deviations exist: open_in_3d_viewer inserts a preposition, and the verb set mixes validate/check/open/read/list/search in ways that are not strictly parallel.
Ten tools is a good size and each has a defensible role in the IFC workflow (validate, inspect rules, check IDS, view, draw, read DXF, twins, live data, objects). The surface is slightly broad for one server — the sketch studio, FIWARE reader and port library pull in adjacent domains — but nothing feels redundant.
Core validation, viewing, drawings and IDS delivery checking are covered, but there is no way to query or extract model content (elements, properties, quantities) or to get a link for a local file, and the digital-twin tool only lists demos rather than creating or managing twins. These gaps will force agents to fall back on external links for common follow-up questions.
Related MCP Connectors
AI Hub for AEC — 50+ 3D formats, clash detection, ACC integration via Autodesk Platform Services.
Convert Revit files to XKT, IFC, or DWG and query BIM data via natural language.
Fast multi-format CAD previews, geometry checks and conversion; measure and share in the workspace.
Edit IFC/BIM building models by language: quantities, checks, edits, new elements, undoable.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to load, query, and analyze IFC building model files, including spatial structures, elements, properties, materials, and geometry.201MIT
- AlicenseNot gradedqualityDmaintenanceAI-powered BIM tool that connects Claude to a Revit file conversion and BIM query service, enabling users to convert .rvt files to XKT, IFC, and DWG, and explore building elements through natural language.1MIT
- AlicenseAqualityDmaintenanceAn MCP server that lets users query, validate, convert, and compare IFC/BIM files using natural language. Runs fully locally and integrates with AI agents like Claude.8MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to inspect, create, and report on IFC/BIM files locally, and to open models in a viewer with BCF viewpoint support.5227 npm13Apache 2.0