Skip to main content
Glama
LoftyTao

Honeybee-MCP

by LoftyTao

What is Honeybee-MCP?

Honeybee-MCP is a Model Context Protocol (MCP) server built on FastMCP. It exposes the capabilities of the Ladybug Tools / Honeybee ecosystem as structured tool calls, allowing AI agents in any MCP-compatible IDE (Cursor, VS Code + Copilot, OpenCode, etc.) to understand, query, and manipulate Honeybee building energy models through natural language.

In short: you describe what you want in plain English, and the AI agent drives Honeybee for you.


Related MCP server: ladybug-tools-mcp

Tool Suite

Honeybee-MCP currently provides 27 MCP tools organized into the following modules. Each module is designed as a "bus" -- a single unified entry point that dispatches to specialized service functions behind the scenes.

Model I/O

load_model and save_model handle the lifecycle of a Honeybee Model.

  • Loading supports three sources: local HBJSON / HBpkl files, Grasshopper shared-memory models, and in-memory dictionaries. When no file is specified, the server automatically scans for Grasshopper models first.

  • Saving exports the current in-memory model to an HBJSON file, with optional pretty-print indentation and property filtering (e.g. energy-only or radiance-only export).

Query

query is the unified read interface. It accepts a target_type (e.g. room, face, aperture, schedule, modifier, sensor_grid) and returns the requested fields for all matching objects.

Typical use cases:

  • List all rooms and their floor areas

  • Inspect boundary conditions and aperture ratios on specific faces

  • Check which energy schedules or radiance modifiers are currently defined

  • Count objects without fetching full data (output_mode="count")

Add

add creates new child objects or resources in the model. Every add call specifies an operation string that selects the concrete creation logic:

Operation

What it does

apertures_by_ratio

Add windows to faces by wall-to-window ratio

aperture_by_width_height

Add a single window with exact dimensions

louvers / louvers_by_count

Add louver shading devices to apertures

schedule_type_limit / schedule_day / schedule_ruleset

Build energy schedules step by step

modifier / modifier_set

Create radiance modifiers and modifier sets

sensor_grid / view

Add radiance analysis objects

Apply

apply assigns attributes and resources to existing objects. This is where room programs, HVAC systems, constructions, and load definitions get attached:

Operation

What it does

room_attributes

Set room-level properties: program type, construction set, modifier set

hvac

Assign HVAC systems (Ideal, PTAC, VAV, etc.) to rooms

opaque_attributes / window_attributes

Set or create constructions on faces and apertures

people / lighting / electric_equipment

Define internal loads with custom schedules

setpoint / ventilation

Configure thermal setpoints and outdoor air requirements

modifier / modifier_set

Assign radiance modifiers to faces, apertures, or rooms

Remove

remove deletes objects with referential-integrity checks. For example, removing a radiance modifier that is still referenced by a face will return a blocked response instead of silently breaking the model.

Supported operations: all_apertures, all_doors, all_shades, face_objects, room_shades, schedule, modifier, sensor_grid, view, and more.

search_properties searches the Honeybee standards library (ASHRAE, NECB, etc.) for pre-defined constructions, construction sets, program types, and modifier sets. Results can be filtered by vintage, climate zone, construction type, and building program.

Visualization

visualization exports the model or selected objects as a VisualizationSet and optional files (VTK, SVG). Supports custom display options, SVG rendering, and file export to a specified folder.

Grasshopper Sync

A set of shared-memory tools for real-time bidirectional communication with Rhino/Grasshopper:

  • load_model_from_shared_memory -- Read a model that Grasshopper has written via HB MCP Writer.

  • save_model_to_shared_memory -- Push the AI-edited model back for Grasshopper to read via HB MCP Reader.

  • check_shared_memory_status / clear_shared_memory_model -- Inspect or reset the shared-memory channel.

  • cleanup_shared_memory_cache -- Remove stale cache files.

Version Control

version_control provides an in-memory undo/redo stack, plus named snapshot management:

  • save / load -- Manually create or restore a named snapshot.

  • undo / redo -- Step backward or forward through edit history.

  • compare -- Diff two snapshots and see what changed (rooms added/removed, properties modified).

  • info / delete / clear -- Inspect, remove, or wipe version history.


Grasshopper Components

Two custom GHPython User Objects are included in grasshopper/:

  • HB MCP Writer -- Serializes a Honeybee Model from Grasshopper to shared memory for the MCP server to read.

  • HB MCP Reader -- Reads a model back from shared memory after the AI agent has finished editing.

Install the .ghuser files from grasshopper/user_objects/ into your Grasshopper User Objects folder (typically %APPDATA%/Grasshopper/UserObjects/). The shared-memory transport uses memory-mapped files, so both Grasshopper and the MCP server must run on the same machine.


Quick Start

1. Clone the repository

git clone https://github.com/LoftyTao/Honeybee-MCP.git
cd Honeybee-MCP

Open the project folder in your MCP-compatible IDE (Cursor, VS Code, OpenCode, etc.), then simply tell the AI:

Help me set up this project:
create a .venv, activate it, pip install -r requirements.txt,
then create the MCP config file for this IDE.

The AI agent will handle virtual environment creation, dependency installation, and MCP configuration automatically. This is the fastest way to get started.

3. AI Agent Skill Installation (for better tool use)

This project includes specialized "skills" (rules) in the agent/skills/ directory that teach AI agents how to use the Honeybee-MCP tools more effectively.

Instruction for AI Agents: When performing an automatic setup, the AI agent should copy the relevant skill documentation into the appropriate skills directory supported by the user's specific AI IDE or CLI. Reference the table below for standard paths:

Tool

Type

Invocation Example

Path

Claude Code

CLI

>> /skill-name help me...

.claude/skills/

Gemini CLI

CLI

Use skill-name...

.gemini/skills/

Codex CLI

CLI

Use skill-name...

.codex/skills/

Kiro CLI

CLI

(Auto) Skills load on-demand

Global: ~/.kiro/skills/ Workspace: .kiro/skills/

Kiro IDE

IDE

/skill-name or (Auto)

Global: ~/.kiro/skills/ Workspace: .kiro/skills/

Antigravity

IDE

(Agent Mode) Use skill...

Global: ~/.gemini/antigravity/skills/ Workspace: .agent/skills/

Cursor

IDE

@skill-name (in Chat)

.cursor/skills/

Copilot

Ext

(Paste content manually)

N/A

OpenCode

CLI

opencode run @skill-name

.agents/skills/

AdaL CLI

CLI

(Auto) Skills load on-demand

.adal/skills/

Example instruction to give your agent:

"Copy all the skill documentation from agent/skills/honeybee-mcp-use/ and install them into the custom skills location for this AI tool (e.g. .cursor/skills/) to enhance your Honeybee modeling capabilities."

4. Manual setup (alternative)

If you prefer to do it yourself:

python -m venv .venv

# Windows
.venv\Scripts\activate
# Linux / macOS
source .venv/bin/activate

pip install -r requirements.txt

Then add the MCP server config to your IDE. The file location depends on the IDE:

  • Cursor -- .cursor/mcp.json

  • VS Code -- .vscode/mcp.json

  • OpenCode -- .opencode/opencode.json

Example configuration:

{
  "mcpServers": {
    "honeybee-mcp": {
      "command": "D:/Projects/Honeybee-MCP/.venv/Scripts/python",
      "args": ["server.py"],
      "cwd": "D:/Projects/Honeybee-MCP"
    }
  }
}

4. Verify

python server.py

If no errors appear, the MCP server is ready.


Usage Examples

Each example below consists of three parts: your input (natural language prompt), Honeybee-MCP tool results (JSON returned behind the scenes), and AI response (what the agent tells you).

Example 1 -- Load a model file

You:

load src\sample\Revit_Sample.hbjson file.

Honeybee-MCP returns:

{
  "success": true,
  "source": "file",
  "identifier": "Revit_Sample",
  "display_name": "Revit_Sample",
  "rooms": 15,
  "floor_area": 295.74,
  "outdoor_shades": 105,
  "orphaned_objects": 0
}

AI response:

Successfully loaded the model from src\sample\Revit_Sample.hbjson.

  • Display Name: Revit_Sample

  • Floor Area: 295.74 m²

  • Number of Rooms: 15

  • Outdoor Shades: 105

  • Orphaned Objects: 0 (faces, shades, apertures, doors)


Example 2 -- Query rooms and check constructions

You:

query all room list and show me their floor areas. Also check what constructions are available for climate zone 5.

Honeybee-MCP returns (two tool calls):

// query -- rooms
{
  "success": true,
  "count": 15,
  "data": [
    {"identifier": "Bedroom_1_a3f2c", "display_name": "Bedroom 1", "floor_area": 18.2},
    {"identifier": "Bedroom_2_b7e1d", "display_name": "Bedroom 2", "floor_area": 15.6},
    {"identifier": "LivingRoom_1_c9a4e", "display_name": "Living Room", "floor_area": 32.1},
    ...
  ]
}

// search_properties -- opaque constructions
{
  "success": true,
  "category": "opaque_constructions",
  "results": [
    {"identifier": "Generic Exterior Wall R-19", "vintage": "2019", "climate_zone": "5"},
    {"identifier": "ASHRAE 189.1-2009 ExtWall Mass ClimateZone 5", "vintage": "2009"},
    ...
  ],
  "total": 12
}

AI response:

The model has 15 rooms. Two of them appear to be bedrooms based on their display names: "Bedroom 1" (18.2 m²) and "Bedroom 2" (15.6 m²). The rest include living spaces, bathrooms, and utility rooms.

For climate zone 5, there are 12 pre-defined exterior wall constructions in the standards library. The most commonly used one is "Generic Exterior Wall R-19". Let me know which one to apply or what to do next.


Example 3 -- Add windows with directional ratios

You:

Clean all the Apertures and Doors. Add windows to vertical exterior walls of all the bedrooms in proportion. The proportions of four directions (east, west, south, and north) are 0.35, 0.5, 0.75, and 0.25 respectively. Critical: Only add windows to wall faces. Do not touch floors, roofs, or any other face type.

Honeybee-MCP returns (multiple tool calls):

// remove -- clear all apertures and doors
{"success": true, "removed_apertures": 24, "removed_doors": 6}

// add -- south-facing walls, ratio 0.75
{"success": true, "added": 3, "ratio": 0.75}

// add -- west-facing walls, ratio 0.5
{"success": true, "added": 2, "ratio": 0.5}

// add -- east-facing walls, ratio 0.35
{"success": true, "added": 2, "ratio": 0.35}

// add -- north-facing walls, ratio 0.25
{"success": true, "added": 2, "ratio": 0.25}

AI response:

Cleared all existing apertures (24) and doors (6). Then added windows to the bedroom exterior walls by direction:

  • South: 75% window-to-wall ratio (3 faces)

  • West: 50% (2 faces)

  • East: 35% (2 faces)

  • North: 25% (2 faces)

Only wall-type faces were processed; floor, roof, and other face types were excluded.


Example 4 -- Checkpoint and rollback

You:

save a version first. I want to try something and might need to undo.

Honeybee-MCP returns:

{"success": true, "version_id": "v3", "description": "Manual save"}

AI response:

Checkpoint saved as version v3. Go ahead with your changes -- you can undo back to this point at any time.


Example 5 -- Complex multi-step workflow

This example demonstrates a complete end-to-end BEM workflow in a single prompt. The AI agent breaks it down into sequential tool calls automatically.

You:

load src\sample\Revit_Sample.hbjson file. query all room list and identify bedrooms. Clean all the Apertures and Doors. Search for available Program types and apply an appropriate apartment program to all bedrooms. Add windows to vertical exterior walls of all the bedrooms in proportion. The proportions of four directions (east, west, south, and north) are 0.35, 0.5, 0.75, and 0.25 respectively. Critical: Only add windows to wall faces. Do not touch floors, roofs, or any other face type. Add louvers to the south-facing windows, and the properties can be customized by you. Apply a PTAC system to all bedrooms for heating and cooling. Check all the modifications of this model and generate a process report.md. Save the model to the "output" folder in the project folder and name it "demo".

Honeybee-MCP processes (10+ sequential tool calls):

1. load_model        --> Loaded Revit_Sample, 15 rooms, 295.74 m²
2. query (rooms)     --> Identified 2 bedrooms by display name
3. remove            --> Cleared all apertures and doors
4. search_properties --> Found matching apartment program types
5. apply (program)   --> Applied apartment program to 2 bedrooms
6. add (apertures)   --> Added directional windows (S:0.75, W:0.5, E:0.35, N:0.25)
7. add (louvers)     --> Added louver shading to south-facing windows
8. apply (hvac)      --> Applied PTAC system to 2 bedrooms
9. query (summary)   --> Collected all modification details
10. save_model       --> Saved as output/demo.hbjson

AI response:

All steps completed. Here is the process summary:

  1. Model loaded -- Revit_Sample: 15 rooms, 295.74 m² floor area.

  2. Bedrooms identified -- Bedroom 1 (18.2 m²) and Bedroom 2 (15.6 m²).

  3. Apertures and doors cleared -- Removed 24 apertures and 6 doors.

  4. Program applied -- "2019::MidriseApartment::Apartment" assigned to both bedrooms.

  5. Windows added -- South 75%, West 50%, East 35%, North 25%. Only wall-type faces were processed.

  6. Louvers added -- South-facing windows received louver shading (depth 0.15 m, 6 louvers per window).

  7. HVAC applied -- PTAC (AllAir category) assigned to both bedrooms.

  8. Model saved -- output/demo.hbjson

A detailed process report has been saved to report.md.


Project Structure

Honeybee-MCP/
├── server.py                    # Entry point
├── tools/
│   ├── mcp_context.py           # FastMCP instance
│   ├── load_model.py            # Model loading (file + shared memory)
│   ├── save_model.py            # Model saving (HBJSON export)
│   ├── operations/              # add / apply / query / remove buses
│   ├── library/                 # Standards library search
│   ├── visualization/           # VTK / SVG export
│   ├── sync/                    # Grasshopper shared-memory bridge
│   ├── versioning/              # Undo / redo / version snapshots
│   └── state/                   # In-memory model state manager
├── grasshopper/
│   ├── src/                     # GHPython source (Reader / Writer)
│   └── user_objects/            # Compiled .ghuser components
├── src/
│   ├── docs/                    # Tutorial slides, workflow docs
│   ├── resource/                # Images and demo assets
│   └── sample/                  # Sample HBJSON model
├── requirements.txt
└── LICENSE                      # GPL-3.0

Requirements

  • Python 3.10+

  • Core: honeybee-core, honeybee-energy, honeybee-radiance, ladybug-core, ladybug-geometry, ladybug-vtk

  • MCP runtime: fastmcp >= 3.1.0

  • Visualization: vtk >= 9.6.0

See requirements.txt for the full pinned dependency list.


Documentation

Document

Description

Tutorial (PDF)

Slide deck: setup, basic & advanced usage

Resource Workflows

End-to-end examples: Energy schedules, constructions, Radiance modifiers, sensor grids


License

This project is licensed under the GNU General Public License v3.0.


Contact

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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/LoftyTao/Honeybee-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server