bonsai-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BONSAI_MCP_LOG_LEVEL | No | Log level for the MCP server: DEBUG, INFO, WARNING, ERROR. | INFO |
| BONSAI_MCP_BLENDER_HOST | No | Address of the Bonsai add-on server. | 127.0.0.1 |
| BONSAI_MCP_BLENDER_PORT | No | Port of the Bonsai add-on server; must match the preference set in Blender. | 9876 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ifc_openA | Open an IFC file and make it the active model. Returns the schema, exporting application, creation dates, units, total entity and element counts, and the ifcopenshell version in use. Refused when Blender already holds a model through Bonsai: opening it here would create a second, independent copy of the same file. |
| ifc_model_infoC | Model summary plus a per-class entity histogram and the list of storeys. |
| ifc_list_entitiesA | List instances of an IFC class (subclasses included), paginated. Always reports the real total alongside the page actually returned. |
| ifc_get_elementA | Full detail for one element: attributes, property sets, quantities, material, type and spatial container. Identify it by GlobalId or STEP id. |
| ifc_selectB | Select elements with an ifcopenshell selector query. Examples: |
| ifc_spatial_treeC | Spatial hierarchy IfcProject -> Site -> Building -> Storey, with the number of elements contained in each node. |
| ifc_list_property_namesA | Every property set and property name that actually exists in this file, with occurrence counts. Call this before writing any property query. Exporters routinely ignore the
standard names — ArchiCAD writes |
| ifc_geometry_infoB | Geometry of one element: representation type, items, profile parameters, the absolute 4x4 placement matrix, bounding box, volume and surface area. The placement is absolute — the whole nested IfcLocalPlacement chain has been multiplied through. Elements whose geometry comes from a shared IfcRepresentationMap are flagged, together with how many products share it. |
| ifc_representation_statsB | Whole-file geometry breakdown by RepresentationIdentifier/RepresentationType, by item class, and by parametric vs tessellated share. Also lists the representation maps shared by the most products. |
| ifc_validateB | Run ifcopenshell.validate and return a condensed report: counts by level, the most frequent messages, and a page of individual issues. |
| bl_statusA | Whether Blender is reachable, which Bonsai and ifcopenshell it runs, and which IFC file it currently has open. Compares the ifcopenshell build behind Blender with the one this server uses and warns when they differ — Bonsai vendors its own copy, and a version gap produces errors that look like data problems. Calling this also syncs the session: once Blender has a project loaded it becomes the authority, every ifc_* read tool starts reading through it, and ifc_open refuses to open a different file. |
| bl_screenshotA | Render the current 3D viewport and return the image. This is an OpenGL viewport render, not a screen grab, so no panels or other
windows appear in it. PNG. |
| bl_focus_elementA | Select the element with this GlobalId, zoom the viewport to it, and return the image together with what was focused. Zooming to an element does not make it visible: anything inside the building — a wall under a roof, a beam inside a slab — ends up behind other geometry and the image shows the obstruction instead. Pass isolate=true to hide everything else, then bl_isolate(restore=true) to bring it all back. |
| bl_isolateA | Hide everything except the given GlobalIds and return the image. Pass restore=true to unhide everything again. Hiding is viewport-only; no IFC data is touched. |
| bl_set_viewC | Point the viewport camera along one axis and return the image. direction: front, back, left, right, top, bottom, axo. |
| bl_reloadA | Rebuild the viewport geometry from the IFC data currently in memory. Not a reload from disk — that would discard unsaved edits. Pass guids to reload only those elements, or omit it for every IFC-backed object. |
| ifc_set_attributeA | Set one IFC attribute (Name, Description, ObjectType, Tag, ...). Target one element with |
| ifc_set_pset_valueB | Set one property inside an existing property set. Run ifc_list_property_names first: exporters rarely use the standard names, and this fails loudly rather than creating a near-miss duplicate. |
| ifc_add_psetB | Create a property set with the given properties, or extend it if it exists. |
| ifc_remove_psetC | Detach a property set from an element. |
| ifc_move_elementB | Translate elements by a delta in metres. Reports origin before and after. |
| ifc_rotate_elementB | Rotate elements about their own origin, around world x, y or z. The element spins in place; it does not orbit the project origin. |
| ifc_set_placementA | Set an element's absolute 4x4 placement matrix. Row-major, translation in the last column in metres, bottom row [0, 0, 0, 1]. Get the current one from ifc_geometry_info. |
| ifc_edit_profileA | Change the parameters of an element's parameterised profile. Refused when the geometry is shared — through an IfcRepresentationMap or a reused profile entity — because the change would silently apply to every element sharing it. The refusal reports how many. Pass apply_to_all=true only when changing all of them is what you actually want. Refused outright on tessellated geometry: there are no parameters left, and nothing here will tessellate to work around that. |
| ifc_set_extrusion_depthC | Set the extrusion depth in metres. Same sharing guard as ifc_edit_profile. |
| ifc_patchA | Run an ifcpatch recipe over the whole model. Recipes: ResetAbsoluteCoordinates, OffsetObjectPlacements, SetWorldCoordinateSystem, ConvertLengthUnit, Optimise.
ConvertLengthUnit and Optimise rebuild the model into a new file object. Standalone they need allow_file_replacement=true; in blender mode they are refused, because Blender's objects would still point into the discarded file. |
| ifc_saveA | Write the model to A new path is required by default. Overwriting anything — including the file the model was opened from — needs overwrite=true, stated explicitly. With validate=true the saved file is reopened and checked, and the result reports any issue that was not already in the model before saving. |
| ifc_revertA | Restore the file from the safety copy taken before this session's first edit. Every edit since then is discarded. In blender mode Blender reloads the restored file too, so memory and disk do not end up disagreeing. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/nhantruong96/bonsai-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server