ifc-mcp
Click on "Deploy 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-mcp load the IFC file 'office.ifc' from my desktop"
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 MCP Server
An MCP (Model Context Protocol) server that enables AI agents to understand and query IFC (Industry Foundation Classes) building model files. This server exposes a rich set of tools for loading IFC files, traversing spatial hierarchies, inspecting elements and properties, querying materials and quantities, and retrieving geometry bounding boxes — allowing AI assistants like Claude to reason about building information models without requiring the user to manually extract data.
Installation
From PyPI (recommended)
pip install ifc-mcp
# or with uv:
uv tool install ifc-mcpClaude Desktop config (no path needed):
{
"mcpServers": {
"ifc": {
"command": "uvx",
"args": ["ifc-mcp"]
}
}
}To update
uv tool upgrade ifc-mcpOr pin to a specific version:
"args": ["ifc-mcp==0.2.0"]Skip permission prompts (Claude Code)
Add the tools to your ~/.claude/settings.json so Claude Code never asks for confirmation:
{
"permissions": {
"allow": [
"mcp__ifc__load_ifc_file",
"mcp__ifc__list_loaded_models",
"mcp__ifc__unload_ifc_file",
"mcp__ifc__get_spatial_structure",
"mcp__ifc__get_element_containment",
"mcp__ifc__get_elements_by_type",
"mcp__ifc__get_element_by_id",
"mcp__ifc__search_elements",
"mcp__ifc__get_property_sets",
"mcp__ifc__get_quantities",
"mcp__ifc__get_material",
"mcp__ifc__get_model_statistics",
"mcp__ifc__get_bounding_box",
"mcp__ifc__get_element_placement",
"mcp__ifc__get_element_local_bbox",
"mcp__ifc__get_element_body_mapping",
"mcp__ifc__get_property_sets_detail",
"mcp__ifc__get_element_by_label",
"mcp__ifc__get_representation",
"mcp__ifc__get_elements_batch"
]
}
}Related MCP server: IFCX MCP
Development Setup
Prerequisites: Python 3.11+, uv
git clone <repo>
cd IfcMcp
uv sync
uv run pytest # verify all tests passClaude Desktop config for local dev:
{
"mcpServers": {
"ifc": {
"command": "uv",
"args": ["run", "python", "server.py"],
"cwd": "/absolute/path/to/IfcMcp"
}
}
}On Windows, use double backslashes: "cwd": "C:\\Users\\...\\IfcMcp"
Tools Reference
Every tool (except list_loaded_models) requires a model_id — the value returned by load_ifc_file.
Tool | Parameters | Description |
|
| Load an IFC file; returns |
| — | List all models in memory |
|
| Free a loaded model |
|
| Full spatial hierarchy (Project→Site→Building→Storey→Space) |
|
| Full containment chain up to Site |
|
| Paginated list by IFC type |
|
| Full element details (includes |
|
| Look up element by integer STEP label ( |
|
| Batch query; |
|
| Filter elements by type/name/pset/property |
|
| All Psets for an element |
|
| Psets split by instance-level vs type-level |
|
| All quantity sets for an element |
|
| Material info (name, layers, category) |
|
| Element counts by type, storey names, schema |
|
| Min/max XYZ bounding box in world coordinates |
|
|
|
|
| Bounding box in element's local coordinate frame |
|
| Body mapping matrix, world transform, mirroring detection |
|
| Representation structure without tessellating geometry |
MCP Resource
Each loaded model exposes a pre-computed summary resource:
ifc://model/{model_id}/summaryThis resource is computed at load time and contains the project name, IFC schema version, element counts by type, and storey names. It gives AI agents a fast overview of a model without issuing individual tool calls.
Error Responses
All tools return structured error objects. Common codes:
{"error": "element_not_found", "details": "..."}
{"error": "model_not_loaded", "details": "..."}
{"error": "geometry_unavailable", "details": "..."}
{"error": "file_not_found", "details": "..."}
{"error": "load_failed", "details": "..."}
{"error": "query_failed", "details": "..."}Available Tools
20 toolsget_bounding_boxA
Get the bounding box (min/max XYZ and dimensions) of an element in project coordinates.
Inputs: model_id (required), global_id (required).
get_element_body_mappingA
Get the body mapping matrix for an element with IfcMappedItem geometry. Returns: has_mapped_item, body_mapping_matrix (4x4), world_transform (OPM × body mapping), world_transform_determinant, is_mirrored (det<0 means Y-negation needed). Essential for detecting baked rotations in luminaire imports.
Inputs: model_id (required), global_id (required).
get_element_by_idB
Get full details for a single element by its GlobalId.
Inputs: model_id (required), global_id (required).
get_element_by_labelA
Look up an element by its integer IFC entity label (#NNN from the STEP file). Returns the same response as get_element_by_id. Use to cross-reference import log output like '[OK] #16535 LightGraphix...' directly against MCP queries.
Inputs: model_id (required), entity_label (required).
get_element_containmentA
Get the spatial containment chain for an element (Space > Storey > Building > Site).
Inputs: model_id (required), global_id (required).
get_element_local_bboxA
Get the local-space bounding box of an element (no world transform applied). Returns min/max XYZ and dimensions in the element's own coordinate system. Use for mounting axis prediction and recessed fixture detection.
Inputs: model_id (required), global_id (required).
get_element_placementA
Get the world-space placement of an element: insertion point (XYZ) and orientation axes (X/Y/Z unit vectors). Useful for position, rotation, and aim direction of elements like luminaires.
Inputs: model_id (required), global_id (required).
get_elements_batchA
Batch query for multiple elements by GlobalId. include options: 'entity_label', 'placement', 'property_sets', 'local_bbox'. Default: ['entity_label', 'placement']. Avoids individual round-trips for files with 200+ fixtures.
Inputs: model_id (required), global_ids (required), include.
get_elements_by_typeA
Get elements of a given IFC type (e.g. IfcWall, IfcDoor). Supports pagination via limit/offset.
Inputs: ifc_type (required), model_id (required), limit, offset.
get_materialA
Get material information for an element. Returns {name, layers, category} — layers is a list of {name, thickness} for layered assemblies, or None for simple materials.
Inputs: model_id (required), global_id (required).
get_model_statisticsA
Get element counts by IFC type, storey names, schema version, and total count.
Inputs: model_id (required).
get_property_setsB
Get all property sets (Psets) for an element as {pset_name: {prop_name: value}}.
Inputs: model_id (required), global_id (required).
get_property_sets_detailA
Get property sets split by source: instance-level psets vs type-level psets. Use to determine whether a property was overridden at instance level or inherited from the type.
Inputs: model_id (required), global_id (required).
get_quantitiesB
Get all quantity sets for an element as {qset_name: {quantity_name: value}}.
Inputs: model_id (required), global_id (required).
get_representationA
Get the representation structure of an element without tessellating geometry. Returns representation type, identifier, and items with IfcMappedItem details (mapping_target_is_identity, mapping_target_matrix). Use to detect baked rotations before geometry extraction.
Inputs: model_id (required), global_id (required).
get_spatial_structureA
Get the full spatial hierarchy: Project > Site > Building > Storey > Space.
Inputs: model_id (required).
list_loaded_modelsA
List all IFC models currently loaded in memory.
Inputs: no named parameters.
load_ifc_fileA
Load an IFC file from the given path. Returns model_id for subsequent queries.
Inputs: path (required).
search_elementsB
Search elements with optional filters: IFC type, name substring, pset_name (must own this pset), property_name/property_value (property within that pset or any pset). Supports pagination via limit/offset.
Inputs: model_id (required), limit, offset, ifc_type, +4 more.
unload_ifc_fileC
Unload an IFC model from memory to free resources.
Inputs: model_id (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 20 tools
Most tools have clearly distinct purposes (loading, spatial structure, element queries, properties, geometry). The only potential confusion is between get_element_by_id and get_element_by_label (both return element details) and get_property_sets vs get_property_sets_detail, but the descriptions explicitly differentiate them by input and level of detail.
All 20 tool names follow a consistent snake_case verb_noun pattern (load_ifc_file, list_loaded_models, get_element_placement, search_elements). The verbs are uniform: load/list/unload for lifecycle, get for queries, search for search, with no mixed conventions or vague action words.
With 20 tools, the server is slightly over the ideal 3-15 range but still well-scoped for the complex domain of IFC model analysis. Each tool addresses a specific aspect of querying building data, and the count is justified by the breadth of information exposed.
The toolset covers the full read-only lifecycle: loading/unloading models, querying spatial hierarchy, elements, properties, quantities, materials, geometry context, and batch operations. Minor gaps exist, such as no direct query of elements by spatial level or retrieval of raw geometry tessellation, but the core analytical workflows are well supported.
Related MCP Connectors
Design buildings as IFC4 BIM models from a brief: an AI architect that plans, builds and edits.
Convert Revit files to XKT, IFC, or DWG and query BIM data via natural language.
Check floor-plan images, trace them into editable plans, export PDF and IFC, and query IFC models.
Read, query, edit and render DWG drawings with AI. No AutoCAD required.
1
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with OpenStudio building energy models through natural language, allowing users to load, inspect, and manipulate OSM files including building geometry, HVAC systems, materials, schedules, and internal loads.11MIT
- AlicenseCqualityDmaintenanceEnables AI assistants to create, edit, and export IFC5/IFCX building information models through natural language, handling spatial structure, elements, geometry, metadata, validation, and export.739 npm26Apache 2.0
- FlicenseAqualityDmaintenanceEnables AI assistants to query standardized building classifications, properties, and data dictionaries from buildingSMART for BIM model enrichment.93-
- 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