Read-only BACnet/IP MCP gateway with Brick + Haystack semantic tagging at ingest
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag — we're steadily working through the catalog.
💡 Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
A read-only BACnet/IP gateway that exposes building automation point databases to LLM agents via MCP, with Brick + Project Haystack semantic tagging at ingest time.
The research note this implementation came out of is at https://habchy.dev/research/bacnet-msi-semantic-gap. A version of the same article is also published at AutomatedBuildings.com (link will be added when the AB.com edition goes live).
Short version: vendor agentic platforms (JCI OpenBlue, Honeywell Forge, Siemens Building X, Tridium Niagara 5) keep their semantic AI layer inside their own controls portfolios. Independent MSIs running mixed-vendor 5-50 building portfolios have BACnet point databases but no clean way to expose them in semantic-tagged form to external LLM agents. This gateway is one answer to that gap.
ezhuk/bacnet-mcp does read and write at the BACnet protocol layer with no semantic normalization. This project sits beside it: it adds the Brick + Haystack tagging step at ingest and restricts the v0.1 surface to read-only for a tighter compliance footprint.
list_devices, list_objects, get_object_value, get_tagged_topologyOr from source:
Python 3.11 or later required.
Create a config file config.yaml:
Run the MCP server:
Or wire it into Claude Desktop:
With the server running and the simulator active (or a real BACnet/IP network reachable), an MCP-capable LLM can run:
User: List all the air-handling units across the building.
Agent (via MCP tool): calls
get_tagged_topology(filter="brick:AHU")Agent response: Found 3 AHUs. AHU-1 has 5 child points (discharge_air_temp, return_air_temp, supply_fan_status, mixed_air_damper_position, outside_air_temp). AHU-2 ... AHU-3 ...
See examples/ for full runnable scripts.
The starter rule library targets common US-style object-name conventions (OAT, DAT, ZNT, CHWS, AHU-1, etc.). Real-world mixed-vendor portfolios use wildly different naming. Before assuming the tool is broken or working, run:
This does one discover + enumerate + tag cycle against your network and prints:
--top-unmatched N for a different count)Use the unmatched list to extend the YAML rule files for your naming convention. A first-run match rate of 30-50% is normal for a portfolio that hasn't been calibrated yet; 70%+ is what you'd want before relying on the tagged topology for LLM queries.
The tagger applies YAML-defined rules to map BACnet object names and units to Brick classes and Haystack tag sets. The default rule set covers about 50 common HVAC, lighting, and metering object-name patterns. Users override or extend by editing src/brick_bacnet_mcp/rules/brick_rules.yaml and haystack_rules.yaml locally.
Example rule (Brick):
See docs/RULES.md for the rule grammar and override conventions.
See docs/ARCHITECTURE.md. Short version:
discovery.py runs Who-Is broadcast, captures I-Am responses, caches device metadatareader.py enumerates the object list per device and polls present-value at the configured intervaltagger.py applies Brick + Haystack rules to each enumerated objecttopology.py assembles the tagged objects into a queryable graphserver.py exposes four MCP tools over stdio or streamable HTTPv0.1 is a research instrument. The roadmap below is what the research article flagged as worth doing next IF v0.1 gets enough sustained-use signal to justify extending. None of it is committed pre-signal.
MIT. See LICENSE.
See CONTRIBUTING.md. PRs welcome for rule library extensions, documentation, examples, and test coverage. Larger changes (write path, non-BACnet protocol support, UI, FDD logic) are out of v0.1 scope. Open an issue first to discuss before submitting a PR.
Factual signals from GitHub, npm, and our automated checks — not a rating.
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/brick-bacnet-mcp)<a href="https://allmcps.com/mcp/brick-bacnet-mcp"><img src="https://allmcps.com/api/badge/brick-bacnet-mcp?style=directory" alt="Brick Bacnet MCP on AllMCPs" /></a>