Skip to main content
Glama
nhantruong96

bonsai-mcp

by nhantruong96

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BONSAI_MCP_LOG_LEVELNoLog level for the MCP server: DEBUG, INFO, WARNING, ERROR.INFO
BONSAI_MCP_BLENDER_HOSTNoAddress of the Bonsai add-on server.127.0.0.1
BONSAI_MCP_BLENDER_PORTNoPort 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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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: IfcWall, IfcWall, IfcSlab, IfcBeam, Name=/B-.*/, IfcSpace, Pset_SpaceCommon.IsExternal=TRUE.

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 BaseQuantities where the standard says Qto_WallBaseQuantities — and a query against a name that is not there returns an empty set with no error at all.

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. width bounds the image's longest side (clamped to 320..2048); the viewport's aspect ratio is preserved.

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 guid, or many with a selector query. A query matching more than max_elements is refused with the count, so a typo cannot rewrite the model.

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.

args is an object keyed by the recipe's own parameter names; a wrong name is answered with the list the recipe accepts and their defaults.

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 path.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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