ifc-geometry-mcp
This server automates geometric audits of IFC building models, detecting issues and generating structured JSON findings for downstream reporting and integration with tools like audit-bim-i3f.
Key Capabilities
Space Inventory: Extracts per-space details (area, zone, type), flags undersized/over-discrepancy rooms, missing zones/floors/surfaces, naming inconsistencies, and stale exports.
Space Clash Audit: Detects duplicate spaces, overlapping rooms, double-modeled closets, and vertical overlaps between floors.
Surface Loss Calculation: Computes lost square meters per space due to wall/column encroachment.
Space Boundaries Check: Identifies missing or incomplete
IfcRelSpaceBoundaryrelationships and missing boundaries between adjacent spaces.Opening Correspondence Check: Verifies that each structural opening has a corresponding architectural opening, with optional bimodel support.
Envelope Surface Extraction: Calculates facade surfaces (including windows), SHAB, and FAC/SHAB ratio, with configurable wall selection modes for ArchiCAD/Revit models, exporting JSON and legacy XLSX.
Output & Integration
All tools write versioned, schema-validated JSON files (and optionally XLSX) to a configurable output directory. An MCP server (stdio transport) enables integration with Claude Desktop/Cowork, with sandboxed file paths. Results are consumed by the audit-bim-i3f server to generate Word reports, XLSX annexes, BCF topics, and Smart Views.
Provides tools for auditing geometric properties of IFC files, a standard for Building Information Modeling (BIM), including space clash detection, inventory extraction, surface loss computation, boundary checking, and opening correspondence analysis.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ifc-geometry-mcprun space inventory on the project IFC"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ifc-geometry-mcp
Serveur MCP ifc-geometry d'audit géométrique IFC basé sur IfcOpenShell.
Il fournit le moteur « préliminaire » consommé par
audit-bim-i3f : il analyse une maquette IFC et écrit
5 fichiers JSON que audit-bim-i3f fusionne dans son audit via
import_preliminary_findings (rapport Word, annexe XLSX, topics BCF, Smart Views).
Ce qu'il détecte
Outil MCP | Fichier produit | Contrôles |
|
| doublons de pièces, chevauchements, placards double-modélisés, chevauchement vertical entre étages |
|
| pièces trop petites, écart surface déclarée/recalculée, pièces sans zone / sans étage / sans surface, typologies de zones (T1..T5), continuité & duplex, cohérence de nommage, fraîcheur de l'export |
|
| m² perdus par pièce (empiètement murs / poteaux) |
|
| pièces sans |
|
| réservations structure sans ouverture archi correspondante (mode bi-maquette) |
Le vocabulaire de sortie (flags, classifications, sévérités) est le contrat
défini par audit_bim/audit/rules/preliminary.py côté audit-bim-i3f. Ne pas le
modifier sans mettre à jour les deux côtés.
Related MCP server: real-estate-sustainability-mcp
Installation
git clone https://github.com/Slimouzi/ifc-geometry-mcp.git
cd ifc-geometry-mcp
python -m venv .venv && source .venv/bin/activate
# bim-core (contrats JSON versionnés + sandbox de chemins) n'est PAS publié
# sur PyPI : on l'installe d'abord depuis son tag Git, sinon la résolution de
# la dépendance ``bim-core>=0.4.0,<0.5`` échoue.
pip install "git+https://github.com/Slimouzi/bim-core.git@bim-core-v0.4.0"
pip install -e .Dépendances clés : ifcopenshell>=0.8, shapely>=2.0, numpy, fastmcp>=3.0
(sur PyPI) et bim-core (tag Git — préinstallation ci-dessus).
Configuration MCP (Claude Desktop / Cowork)
Ajouter dans le bloc mcpServers, en alignant AUDIT_OUTPUT_DIR sur celui
d'audit-bim-i3f pour que les JSON atterrissent là où l'import les lit :
"ifc-geometry": {
"command": "/Users/stani/code/MCP/ifc-geometry-mcp/.venv/bin/ifc-geometry-mcp",
"args": ["--transport", "stdio"],
"env": {
"AUDIT_OUTPUT_DIR": "/Users/stani/code/MCP/audit_out",
"AUDIT_INPUT_DIR": "/Users/stani/code/MCP/audit_in"
}
}AUDIT_INPUT_DIR: dossier autorisé pour les IFC lus (sandbox). Si absent, des chemins absolus existants sont acceptés (mode local/dev).AUDIT_OUTPUT_DIR: dossier d'écriture des JSON (défaut./out).
Pipeline type (premier run)
extract_space_inventory(ifc_path=".../250613_MN_BAT.ifc")
run_space_clash_audit(ifc_path=...)
compute_surface_loss(ifc_path=...)
check_space_boundaries(ifc_path=...)
check_opening_correspondence(ifc_path=..., structure_ifc_path=...) # optionnel
│ (5 JSON dans AUDIT_OUTPUT_DIR)
▼
audit-bim-i3f : import_preliminary_findings(space_clash_json=..., inventory_json=...,
surface_loss_json=..., boundaries_json=..., openings_json=...)
▼
generate_avp_i3f_pack / generate_word_report → rapport d'audit préliminaireLes 5 outils sont indépendants et peuvent tourner en parallèle. Voir
Runbook_Cablage_ifc-geometry_Premier_Run.md pour la procédure détaillée.
Seuils (à confirmer avec I3F)
Paramètre | Défaut | Outil |
surface mini pièce habitable |
|
|
tolérance écart surface |
|
|
fraîcheur export |
|
|
recouvrement pièces |
|
|
seuil doublon |
|
|
adjacence limites |
|
|
appariement ouvertures |
|
|
Contrats JSON émis
Trois sorties sont des contrats versionnés définis dans
bim-core (bim_core.contracts) :
Outil | Fichier | Schéma |
|
|
|
|
|
|
|
|
|
Ce sont les sorties officielles du serveur. Ce MCP calcule ; la mise en
forme client (XLSX, DOCX, PDF) relève d'audit-bim-i3f, qui consomme ces JSON.
extract_envelope_surfaces sait encore produire un classeur .xlsx, mais il
est LEGACY : plus écrit par défaut, disponible via legacy_xlsx=True, et
émettant un DeprecationWarning. Le remplacement est de passer
<stem>_envelope.json en envelope_json à generate_avp_i3f_pack — ou de
laisser ce dernier le résoudre seul. Dupliquer la charte MOA dans deux dépôts
créerait deux vérités possibles pour un même livrable.
Chaque document porte schema, source (producteur, outil, version, maquette),
created_at, et ses données métier — summary / par_type /
hors_filtre_type pour l'enveloppe, quantities / coverage pour les
quantités. Les payloads sont validés avant écriture : un document non
conforme fait échouer l'outil au lieu de produire un fichier douteux.
Ce sont des documents V1 d'origine, jamais des payloads historiques migrés :
ils sont acceptés par bim-core sans avertissement de compat et passent le mode
strict BIM_CORE_JSON_STRICT_SCHEMA=true (test tests/test_emitted_contracts.py).
spatial_evidence/v1 — preuves géométriques neutres
Socle destiné aux profils AMO qui doivent trancher des contrôles de dimension, de contenance et d'encombrement plutôt que des propriétés IFC. Le document ne porte aucun seuil et aucun verdict : un seuil appartient au maître d'ouvrage qui l'écrit, une mesure appartient à la maquette.
Ce que le contrat impose de dire honnêtement :
Il n'existe pas de champ « largeur ». Deux approximations nommées par leur méthode,
min_rect_width_m(petit côté du rectangle englobant orienté) etinscribed_diameter_m(plus grand cercle inscrit). Elles coïncident et valent la largeur sur une pièce convexe. Sur un L à branches de 2,00 m elles rendent 6,00 et 2,34 : aucune des deux n'est la largeur du passage le plus étroit. Trancher un contrôle de largeur de circulation sur forme quelconque demande un axe médian, absent de ce lot.Le rattachement objet → espace porte sa méthode —
ifc_declared(lu dans le fichier),centroid_in_footprintoufootprint_overlap(déduits). Un consommateur exigeant peut refuser les deux derniers.Ce qui n'a pas été mesuré est compté, pas supprimé.
geometry_statusdistingueno_representation(lacune de maquette) deshape_failed(forme déléguée à des sous-éléments écartés par la sélection — conséquence du périmètre, pas défaut du fichier) et dedegenerate(boîte englobante disponible, empreinte non : le cas de toutes les menuiseries).
Sélection par exclusion (selection.excluded_classes), jamais par liste
blanche : une classe oubliée dans une liste blanche disparaîtrait sans bruit et
le consommateur conclurait à une absence.
Relevé sur la maquette de référence (10 524 produits, 3 362 retenus, ~18 s) :
2 452 boîtes englobantes, 757 shape_failed (murs composites Archicad), 409
degenerate (menuiseries), 868 rattachements dont 749 déclarés par l'IFC.
Les cinq JSON de findings préliminaires (*_space_inventory.json,
*_space_clash_findings.json, *_surface_loss.json, *_boundaries.json,
*_openings_check.json) ne sont pas encore contractualisés : leur forme
reste verrouillée par tests/test_contract.py.
Sélection de l'enveloppe : trois modes
extract_envelope_surfaces propose trois modes de sélection des murs. Le mode
est déduit des motifs fournis, ou imposé par filter_mode.
Mode | Déclenchement | Sélection | Total façade |
|
| murs du calque, filtrés par |
|
|
| murs extérieurs géométriques, filtrés par |
|
| aucun motif | murs marqués extérieurs (limites d'espace ou | murs extérieurs, menuiseries incluses |
Sur une maquette ArchiCAD, le mode géométrique ne reproduit pas la décomposition MOA : le calque est ce qui délimite réellement l'enveloppe, et il faut encore écarter les habillages (zinc, alu, bois, couvertines) qu'il contient.
Sur une maquette Revit, le problème est inverse : il n'y a aucun calque, et
chaque façade est modélisée en murs superposés — structure porteuse,
doublage isolant, peau extérieure. Sommer les murs extérieurs compte alors la
même façade trois ou quatre fois : sur un cas réel, 9 030 m² de façade pour
2 392 m² de SHAB, soit un ratio de 3,77 physiquement absurde. type_pattern
désigne la couche qui représente la façade et ramène le total à 2 206 m²
(ratio 0,92).
Les motifs sont explicites — aucune valeur n'est codée en dur pour un projet donné :
# ArchiCAD : le calque délimite, le type écarte les habillages.
extract_envelope_surfaces(
"modele.ifc",
seuil_3f=0.9,
layer_pattern=r"221|ext[ée]rieurs?\s+p[ée]riph[ée]riques",
type_pattern=r"^ME[ _]",
)
# Revit : pas de calque, le type désigne la peau extérieure.
extract_envelope_surfaces(
"modele.ifc",
type_pattern=r"MUR ENDUIT|BARDAGE BOIS|ZINC|VERRE REGLIT",
filter_mode="geometric_type_filter", # facultatif : déduit du motif
)filter_mode impose le mode au lieu de le déduire. Un mode demandé dont le
motif manque est une erreur, jamais une dégradation silencieuse : se rabattre
sur une autre sélection changerait la nature du total sans que rien ne le dise.
Le filtre appliqué est tracé dans diagnostics.filters du JSON produit — mode,
motifs, types retenus et types rejetés. Le résultat est donc rejouable à
partir des seuls paramètres, sans retouche du contrat après génération.
Menuiseries en mode geometric_type_filter. Elles sont comptées sur les
murs extérieurs avant le filtre de type, et non sur les seuls types retenus.
Ce n'est pas un oubli : dans une façade Revit multicouche, la baie est portée par
le mur porteur (béton, ossature), pas par la peau extérieure, qui est une
couche non porteuse. Mesuré sur une maquette réelle : 108 menuiseries / 375,89 m²
sur les 404 murs extérieurs, et zéro sur les 128 murs des types retenus.
Conséquence assumée : la ventilation par type (menuiseries_m2) peut être nulle
sur toutes les lignes alors que le total ne l'est pas — le contrat expose alors
diagnostics.menuiseries_m2_sur_types_rejetes pour que l'écart s'explique.
Ratio FAC/SHAB. Définition unique dans les trois modes :
superficie_facades_nette_m2 / shab_m2, menuiseries exclues — celle que le
livrable Excel calcule. Deux définitions concurrentes du même indicateur ont
circulé (0,92 dans le classeur, 1,05 dans le contrat) ; il n'en reste qu'une.
Nom de type métier. Résolu dans cet ordre : type IFC
(IfcWallType.Name via IfcRelDefinesByType, atteint par
ifcopenshell.util.element.get_type — et non IsTypedBy, qui n'existe qu'en
IFC4 alors que les maquettes I3F sont en IFC2X3), puis ObjectType, puis
PredefinedType. Ce dernier n'est qu'un recours ultime : il vaut
ELEMENTEDWALL pour tous les murs ArchiCAD et écraserait la décomposition
métier en un type unique. Le Name d'instance n'intervient qu'en tout
dernier : sur Revit il porte l'identifiant de l'élément
(Mur de base:MUR ENDUIT 20 mm:3566323) et ferait un type distinct par mur.
SHAB. Une seule définition dans les trois modes : seules les pièces
rattachées à une zone comptent — donc à un logement — hors annexes non
habitables (cellier, cave, balcon, garage, escalier, local). Les exclusions
appliquées sont listées dans diagnostics.shab_types_exclus.
summary.methode_shab déclare la méthode employée, au même titre que
methode_facade. Le ratio a une formule unique, mais comparer deux ratios
suppose des dénominateurs de même nature : le mode géométrique comptait
auparavant toutes les pièces, y compris hors logement, et son ratio n'était
donc pas comparable à celui des modes filtrés.
Sur une maquette sans aucune IfcZone, le zonage n'est pas une donnée
manquante mais une convention absente : le calcul se replie sur toutes les
pièces hors annexes et le déclare
(methode_shab: "toutes_pieces_hors_annexes_sans_zonage"). En revanche, si des
zones existent mais qu'aucune pièce n'y est rattachée, la SHAB vaut 0 et le
ratio devient nul — c'est un défaut de modélisation réel, qu'un repli
masquerait sous un chiffre d'apparence normale.
Détails géométriques
Empreinte 2D d'un élément = union (
shapely.unary_union) des facettes du maillage IfcOpenShell (coordonnées monde) projetées sur le plan XY ; les faces verticales, projetées en segments, sont éliminées.Surface recalculée = aire de cette empreinte ; comparée à la surface déclarée (
Qto_SpaceBaseQuantities.NetFloorArea).Perte de surface = intersection de l'empreinte d'une pièce avec celles des murs/poteaux dont la plage d'altitude recoupe la pièce (indexation
STRtree).
Tests
pytest -q # contrat de schéma + smoke géométrique (mini-maquette IFC)tests/test_contract.py verrouille la forme des payloads ; tests/test_geometry_smoke.py
construit une petite maquette (2 pièces qui se chevauchent + placard inclus +
mur empiétant) et vérifie que le clash, l'inventaire et les pertes de surface
fonctionnent réellement via IfcOpenShell.
Licence
Apache-2.0 — © Stanislas Limouzi / BIMData.
Available Tools
6 toolscheck_opening_correspondenceA
Vérifie que chaque réservation structure a une ouverture archi.
Écrit <stem>_openings_check.json (schéma check_opening_correspondence).
| Name | Required | Description | Default |
|---|---|---|---|
| ifc_path | Yes | Maquette archi (ou combinée si ``structure_ifc_path`` absent). | |
| overwrite | No | Écrase le JSON existant. | |
| tolerance_m | No | Tolérance d'appariement des centroïdes d'ouvertures (défaut 0.10 m). | |
| structure_ifc_path | No | Maquette structure (mode bi-maquette recommandé). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It does disclose the key side effect of writing `<stem>_openings_check.json` with a specific schema. However, it omits preconditions, failure behavior, and whether any other modifications occur; it only hints at overwrite behavior through a parameter description.
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 description is two short sentences, front-loaded with the core purpose and immediately followed by the output artifact specification. It contains no filler, no redundant restatement of the tool name, and every sentence contributes value.
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?
The presence of an output schema and full input schema lowers the burden, and the description does state the main purpose and output file. However, it lacks practical workflow context—such as the recommended bi-maquette mode and how the results should be interpreted—leaving clear gaps for a moderately complex checking tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameters with meaningful descriptions, including `tolerance_m` and `structure_ifc_path`. The tool description itself adds no parameter-specific details beyond what the schema already provides, so the baseline score of 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 the specific verb 'Vérifie' followed by the exact resource and relationship: 'chaque réservation structure a une ouverture archi.' This clearly differentiates it from sibling tools focused on space boundaries, surfaces, clashes, and surface loss.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is implied by the action ('vérifie que chaque réservation structure a une ouverture archi'), but there is no explicit when-to-use or when-not-to-use guidance, no mention of alternatives, and no pointer to sibling tools. The schema notes the recommended bi-maquette mode, but the description itself does not provide this usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_space_boundariesA
Détecte les limites manquantes entre pièces adjacentes.
Écrit <stem>_boundaries.json (schéma check_space_boundaries).
| Name | Required | Description | Default |
|---|---|---|---|
| ifc_path | Yes | Chemin de la maquette IFC. | |
| overwrite | No | Écrase le JSON existant. | |
| adjacency_tol_m | No | Distance max (m) entre contours pour considérer deux pièces adjacentes (défaut 0.35, ~épaisseur d'un mus). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must self-disclose behaviors. It explicitly mentions the side effect of writing a JSON file (`<stem>_boundaries.json`), which is a key behavioral trait. It could additionally mention overwrite behavior or valid IFC requirements, but the core behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose and immediately followed by the output file detail. Every sentence earns its place with no wasted words.
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?
The tool is moderately complex (IFC processing, file output) but the description, combined with a fully documented schema and an output schema, provides enough context for an agent to select and invoke it. It could mention the purpose of the boundary JSON or prerequisites, but the current level is adequate.
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 parameters are fully documented. The description adds no extra semantic meaning beyond the schema, and the baseline of 3 applies because the schema already carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Détecte les limites manquantes entre pièces adjacentes' (detects missing boundaries between adjacent spaces). It clearly distinguishes itself from siblings by focusing on boundary detection, and it also names the output file and 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?
The description implies usage for analyzing IFC space boundaries but provides no explicit guidance on when to use this tool versus alternatives. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_surface_lossA
Calcule les m² perdus par pièce (empiètement murs/poteaux).
Écrit <stem>_surface_loss.json (schéma compute_surface_loss).
| Name | Required | Description | Default |
|---|---|---|---|
| ifc_path | Yes | Chemin de la maquette IFC. | |
| overwrite | No | Écrase le JSON existant. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of disclosing side effects. It does state that the tool writes a file (`<stem>_surface_loss.json` with schema `compute_surface_loss`), which is an important behavioral trait. However, it omits details like file path derivation, overwriting behavior (though the `overwrite` parameter implies it), or error handling for invalid IFC input.
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 description is exceptionally concise: two short sentences that lead with the primary action and outcome. It includes the critical output artifact and schema name without any fluff or redundancy, earning a perfect score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has only two parameters and an output schema, the description is largely complete: it explains the computation purpose, the output file name, and the schema. Minor gaps such as the meaning of `<stem>` and the lack of comparison to sibling tools prevent a perfect score, but for a simple tool, this is sufficient.
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 input schema has 100% description coverage for both parameters: `ifc_path` is clearly explained as the path to the IFC model and `overwrite` as overwriting existing JSON. The description itself adds no parameter-specific meaning beyond the schema, so the baseline score of 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?
The description starts with a specific action verb 'Calcule' and identifies the exact resource: 'm² perdus par pièce (empiètement murs/poteaux)'. This clearly distinguishes it from sibling tools like extract_envelope_surfaces or check_space_boundaries, which focus on different aspects of space analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the calculation semantics, but the description does not explicitly state when to use this tool over alternatives or mention any exclusions. There is no guidance such as 'for other surface analyses, use...', which leaves an agent to infer applicability from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_envelope_surfacesA
Calcule les surfaces d'enveloppe (façades, menuiseries, SHAB, ratio).
Écrit <stem>_envelope.json ET <stem>_enveloppe.xlsx (ce dernier au
format attendu par le pack I3F — à passer en enveloppe_xlsx à
generate_avp_i3f_pack).
| Name | Required | Description | Default |
|---|---|---|---|
| ifc_path | Yes | Chemin de la maquette IFC. | |
| seuil_3f | No | Seuil réglementaire 3F du ratio FAC/SHAB (optionnel, politique externe — laissé vide si non fourni). | |
| overwrite | No | Écrase les fichiers existants. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing side effects. It explicitly names the two output files (`<stem>_envelope.json` and `<stem>_enveloppe.xlsx`) and notes the special I3F format, which is key behavioral information beyond the schema. It doesn't detail overwrite or failure modes, but the file-writing behavior is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly written sentences: the first states the calculation scope, the second specifies the two output files and the formatting requirement. No filler or redundancy, and the key verb is front-loaded.
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 tool with 3 parameters and an output schema, the description is adequate: it covers purpose, outputs, and downstream integration. It could mention a potential dependency on earlier checks (like check_space_boundaries), but that's not essential for basic invocation.
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?
All three parameters are fully documented in the input schema (100% coverage), so the schema already explains ifc_path, seuil_3f, and overwrite. The description adds no additional parameter-level meaning, keeping this at the baseline.
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 begins with 'Calcule les surfaces d'enveloppe' – a specific verb (calculates) and resource (envelope surfaces), listing categories (façades, menuiseries, SHAB, ratio). This clearly distinguishes it from sibling tools like extract_space_inventory or check_space_boundaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by stating the output xlsx is 'au format attendu par le pack I3F' and explicitly directs the user to pass it as 'enveloppe_xlsx' to 'generate_avp_i3f_pack'. It does not explicitly list exclusions or alternatives, but the intended workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_space_inventoryC
Inventaire pièce par pièce + zones + nommage + fraîcheur du modèle.
Écrit <stem>_space_inventory.json (schéma extract_space_inventory).
| Name | Required | Description | Default |
|---|---|---|---|
| ifc_path | Yes | Chemin de la maquette IFC (sandbox ``AUDIT_INPUT_DIR``). | |
| overwrite | No | Écrase le JSON existant. | |
| area_tol_pct | No | Tolérance d'écart surface déclarée/recalculée (défaut 5 %). | |
| analysis_date | No | Date d'analyse ISO (défaut aujourd'hui) pour l'écart avec la date d'export. | |
| stale_after_days | No | Âge max de l'export avant alerte fraîcheur (défaut 90 j). | |
| min_area_threshold_m2 | No | Seuil de surface mini des pièces habitables (défaut 9 m² — à confirmer avec I3F). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It states that the tool writes a JSON file, but does not mention potential side effects like overwriting behavior, error handling, or whether it modifies the input IFC file. This is minimal transparency for a write operation.
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 description is very concise, using two short sentences to convey the tool's core function and output. It is front-loaded with the main purpose and includes the output file name and schema, making it efficient without excessive detail.
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?
The output schema exists, so return values need not be explained. However, the description lacks usage context, such as prerequisites (e.g., valid IFC path) or why one would choose this tool over siblings. It is adequate for a basic understanding but falls short of full contextual guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with detailed descriptions for all six parameters, so the description adds no additional parameter semantics. It does not explain the parameters' purpose beyond what the schema already provides, earning the baseline score.
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 clearly indicates the tool creates a room-by-room inventory with zones, naming, and model freshness, and writes a JSON file. It does not explicitly differentiate from sibling tools like check_space_boundaries or compute_surface_loss, but the purpose is specific enough to avoid confusion.
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?
No guidance is given on when to use this tool versus alternatives such as run_space_clash_audit or extract_envelope_surfaces. The description lacks any conditional context or exclusions, leaving usage entirely implied by the tool's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_space_clash_auditA
Détecte doublons, chevauchements et placards double-modélisés.
Écrit <stem>_space_clash_findings.json (schéma run_space_clash_audit).
| Name | Required | Description | Default |
|---|---|---|---|
| ifc_path | Yes | Chemin de la maquette IFC. | |
| overwrite | No | Écrase le JSON existant. | |
| duplicate_ratio | No | Recouvrement mutuel au-delà duquel deux pièces sont considérées en doublon (défaut 0.90). | |
| overlap_min_ratio | No | Recouvrement mini (sur la plus petite pièce) pour un chevauchement (défaut 0.10). | |
| closet_inside_ratio | No | Inclusion mini d'un placard dans une pièce pour un double-modélisé (défaut 0.80). | |
| vertical_min_overlap_m | No | Chevauchement vertical mini (m) entre pièces d'étages différents (défaut 0.20). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the tool writes a JSON file with a specific schema, which is a useful side-effect. However, it does not explicitly state whether the analysis is read-only, whether it can overwrite files, or any prerequisites or failure modes, leaving some behavioral gaps.
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 description is exceptionally concise, consisting of two sentences that front-load the purpose and then state the output. No wasted words or redundancy.
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 6 parameters and an output schema, the description explains the core purpose and output file but does not elaborate on the audit process or the contents of the findings JSON. It is adequate given the schema, but lacks broader context like when to choose this tool over siblings or what the findings look like.
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%, with each parameter clearly described (ifc_path, overwrite, duplicate_ratio, etc.). The tool description adds minimal parameter-specific value, only hinting at the output file naming pattern via `<stem>` from ifc_path. Thus the baseline of 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?
The description clearly states the tool detects duplicates, overlaps, and double-modeled closets, using a specific verb and resource. This distinguishes it from sibling tools like check_space_boundaries or extract_space_inventory, which target different aspects of space analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention any exclusions or alternative tools, leaving usage only implied by the name and purpose.
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. Dates show when Glama detected each change.
6 tool updates
v0.1.1- First observed
check_opening_correspondence - First observed
check_space_boundaries - First observed
compute_surface_loss - First observed
extract_envelope_surfaces - First observed
extract_space_inventory - First observed
run_space_clash_audit
TDQS
Each tool targets a unique aspect of IFC geometry analysis: boundaries, inventory, clashes, surface loss, openings, and envelope. No two tools have overlapping purposes, and descriptions clearly differentiate their outputs.
All tool names follow a consistent verb_noun pattern (check_, extract_, run_, compute_, check_, extract_), with clear action words and specific object nouns. This predictable structure makes it easy to infer tool behavior.
With 6 tools, the server is well-scoped for its domain. Each tool covers a distinct geometry analysis function, and the number feels neither too thin nor overwhelming.
The tool set covers the core lifecycle of space quality assessment: boundary verification, inventory extraction, clash detection, surface loss computation, opening matching, and envelope extraction. No glaring gaps for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that audits the fairness of construction and renovation estimates in Japan. Provides fair-price ranges, overcharge detection, and verifiable unit-cost data based on JCCDB (65,520 items across 402 categories, CC BY 4.0, DOI-backed).
Conformance checker for MCP servers. Free, no key, verdicts recomputable and re-measured daily.
MCP Spec Compliance MCP — audits any MCP server.json against the official Model Context Protocol
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for BIM-to-building-energy simulation workflows with IFC extraction, TEASER integration, scenario modeling, weather binding, and results export for downstream WAT/ROI analysis.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for analyzing building sustainability metrics via Excel, PDF, and frameworks like ESG, LEED, BREEAM, DGNB with IFC integration.2MIT
- AlicenseAqualityBmaintenanceAn 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
- AlicenseNot gradedqualityCmaintenanceMCP server that enables one-click BIM audits by chaining IFC statistics, validation, and quantity takeoff workflows through natural language queries.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Slimouzi/ifc-geometry-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server