MCP server for querying and analyzing IFC (Industry Foundation Classes) building model files
The server implements 8 IFC-domain tools with basic structure but significant quality gaps. Tool names follow the verb_noun convention (e.g. get_entities, get_entity_properties), which is good. However, parameter descriptions are inconsistent: some tools have minimal descriptions (e.g., 'greet' has null description for 'name'), and critical domain-specific context is missing. The 'greet' tool is a placeholder with no business value in an IFC server. Most importantly, NO OUTPUT SCHEMAS are documented anywhere in the source code, neither in docstrings nor in schema declarations. Without documented output structure, LLMs cannot predict what fields to expect, breaking downstream tool composition and forcing agents to guess. Error handling is present but generic ('error, the file is not found or broken') without recovery guidance. Parameter constraints (e.g., valid entity types, path format requirements) are mentioned in descriptions but not formalized as enums or patterns.
Get IFC entities with a specific type in an ifc file, only globalId and name of each entity are returned
Get globalIds of entities in a spatial structure (IfcSpace, IfcBuildingStorey, IfcBuilding, IfcSite) with globalId in an ifc file
Get location of an entity with a certain GlobalId in an ifc file
Get all properties of an entity with a certain GlobalId in an ifc file
Get property with a certain name of all entities
Get globalId, type, name of openings (IfcWindow, IfcDoor) on a certain wall in an ifc file
NO OUTPUT SCHEMAS DOCUMENTED. Source code contains no @mcp.tool() schema registration or return-type annotations. LLMs cannot predict response structure. Example: get_entities returns a list of dicts with 'globalId', 'name', 'type' but this is invisible in the tool definition, agents must infer or guess.
PARAMETER DESCRIPTIONS MISSING OR MINIMAL. 'greet' tool has null description for 'name' parameter. Many IFC entity type parameters (e.g., 'entity_type' in get_entities) lack format constraints, LLM could pass invalid types like 'IfcRandomType' with no guidance.
GENERIC ERROR MESSAGES WITHOUT RECOVERY GUIDANCE. Errors like 'error, the file is not found or broken' do not tell the LLM what to do next, should suggest alternative actions, e.g., 'File not found at path. Check file_path spelling or use absolute path.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Get globalId, type, name of boundaries (IfcWindow, IfcDoor, IfcWall, etc.) of a certain space in an ifc file
PLACEHOLDER TOOL 'greet' HAS NO BUSINESS VALUE. Takes up a tool slot and adds cognitive load during selection. Remove or repurpose for IFC-domain validation (e.g., 'validate_ifc_file').
UNDOCUMENTED PARAMETER DEPENDENCIES. Tool get_named_property_of_entities accepts 'globalIds' (array) and 'prop_name', there is no hint about what happens if prop_name does not exist on an entity, or if globalIds list is empty. LLMs may pass invalid combinations without guidance.